我想知道为什么 .Net 没有启动线程的通用方法。
例如,我们启动一个像下面这样的线程......
Thread th = new Thread(SayHello);
th.Start("Hello");
private static void SayHello(object obj)
{
string str = obj as string;
Console.WriteLine(str);
}
为什么我们不能拥有我的意思是为什么.Net 团队没有考虑使其通用?
就像下面这样...
Thread<string> th = new Thread<string>(SayHello);
因为很多时候,当我将值类型传递给线程启动时,我必须进行装箱/拆箱。
我可以看出为什么实现 BCL 的人不费心去写这样的东西的几个原因:
- 如果您担心性能,那么强制转换(即使是拆箱)将比实际创建线程的影响小得多。
- 如果您担心类型安全,您可以轻松使用 lambda:
new Thread(() => SayHello("Hello"))
.
-
Thread<T>
将是一个令人困惑的类型,因为不清楚那是什么T
代表。特别是因为它的含义与T
in Task<T>
.
- 如果您愿意,您可以创建您的
Thread<T>
作为使用 20 行的包装器(见下文)。
因此,这个问题很小,而且很容易解决,如果它确实困扰着您,并且解决方案可能会令人困惑。这很可能就是为什么没有花费资源来实现这一点。
可能的实施Thread<T>
:
class Thread<T>
{
private readonly Action<T> m_action;
private readonly Thread m_thread;
private T m_parameter;
public Thread(Action<T> action)
{
m_action = action;
m_thread = new Thread(DoWork);
}
public void Start(T parameter)
{
m_parameter = parameter;
m_thread.Start();
}
private void DoWork()
{
m_action(m_parameter);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)