我有一个要在线程中处理的项目队列,类的任何实例都可以将项目添加到队列中进行处理。
我这样做的想法是在处理项目的类中有一个静态线程,唯一的问题是我不知道从哪里开始这个线程,因为我无法在它的初始化中启动它。
有没有办法启动一个静态线程?还是我应该完全改变架构?
最佳答案
您可以在 static constructor 中启动它对于类(class):
private class MyClass
{
static MyClass()
{
// start thread here
}
}
您也可以使用典型的单例方法在类的常规构造函数中启动它。
或者您可以使用新的 .NET 4 Lazy<T>
实例化和启动它的方法。
但是在类构造函数中工作通常不是一个好习惯。更好的方法是确保线程仅在有人调用时才存在,比如 Execute()
在类的一个实例上。 Execute
内你可以使用的方法 Lazy<T>
或单例方法来创建和启动将处理它的单线程实例。
纯粹主义者会指出,实际上您可能根本不想这样做,并且工厂方法可能更适合创建您的类的实例,并且您应该将您的类和处理它的 worker 之间的关注点分开.
其他人会建议您在这里根本不需要线程,只需使用 .NET4 Task
s 并使用框架提供的队列/执行方法将项目排队执行。
关于C#启动一个静态线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4841683/