Dre*_*rew 1 c# static multithreading
我有一个我想在一个线程中处理的项目队列,并且一个类的任何实例都可以将项目添加到要处理的队列中.
我这样做的想法是在处理项目的类中有一个静态Thread,唯一的问题是我不知道从哪里开始这个线程,因为我无法在初始化时启动它.
有没有办法可以启动静态线程?或者我应该完全改变架构?
您可以在类的静态构造函数中启动它:
private class MyClass
{
static MyClass()
{
// start thread here
}
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用典型的单例方法在类的常规构造函数中启动它.
或者您可以使用新的.NET 4 Lazy<T>方法来实例化和启动它.
但是在类构造函数中完成工作通常不是一个好习惯.更好的方法是确保线程仅在有人调用时存在,比如Execute()在类的实例上调用.在该Execute方法中,您可以使用Lazy<T>单独的方法来创建和启动将处理它的单个线程实例.
纯粹主义者会指出,实际上你可能根本不想这样做,并且工厂方法可能更适合创建类的实例,并且你应该分离你的类和处理它的工人之间的关注点.
其他人会建议您根本不需要线程,只需使用.NET4 Task并使用框架提供的队列/执行方法将项目排队等待执行.