C#启动一个静态线程

标签 c# multithreading static

我有一个要在线程中处理的项目队列,类的任何实例都可以将项目添加到队列中进行处理。

我这样做的想法是在处理项目的类中有一个静态线程,唯一的问题是我不知道从哪里开始这个线程,因为我无法在它的初始化中启动它。

有没有办法启动一个静态线程?还是我应该完全改变架构?

最佳答案

您可以在 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/

相关文章:

注释和静态 block 的java处理顺序

c# - 如何在方法调用中速记数组声明?

c# - 定义了重复的 'entityFramework' 部分 - EntityFramework6 升级

java - 静态嵌套类的实例变量与外部类的静态变量

c - 可靠地将相同的数据广播到 C 中的多个套接字

Java 事件队列。为什么一切都应该在 invokelater 方法中?

node.js - 如何在node.js中使用express.static显示index.html之前显示登录页面

c# - Web 应用程序中的方法应该是公共(public)的还是内部的?

c# - 为什么编译器将 var 推断为动态类型而不是具体类型?

java - 应用程序在使用 AsyncTask 时挂起并挂起所有线程