C# .NET异步框架-线程本地数据是否有限制
我期待着写一个Windows服务,将启动各种“工作” 每个“工作”将:C# .NET异步框架-线程本地数据是否有限制,c#,multithreading,asynchronous,thread-safety,async-await,C#,Multithreading,Asynchronous,Thread Safety,Async Await,我期待着写一个Windows服务,将启动各种“工作” 每个“工作”将: 在它完成的事情上要清楚 在服务的生命周期内运行,因此“长时间运行”。通常,一个作业将从数据库中获取10个任务并对其进行处理,然后休眠,然后一次又一次地重复此周期 共享相同的“上下文”。应用程序将松散耦合,并调用IoC来获取类。它还将在此上下文中存储一些数据 我需要每个作业能够并行运行,并作为单独的程序有效运行 我的第一个想法是为每个作业创建一个线程。这是可以的,但有一个缺点,即ManualResetEvent会停止线程的
- 在它完成的事情上要清楚
- 在服务的生命周期内运行,因此“长时间运行”。通常,一个作业将从数据库中获取10个任务并对其进行处理,然后休眠,然后一次又一次地重复此周期
- 共享相同的“上下文”。应用程序将松散耦合,并调用IoC来获取类。它还将在此上下文中存储一些数据
仅供参考:发布非常有帮助。与其在线程之间共享对象(或静态对象)的threadlocal属性,不如不要在线程之间共享对象。让每个作业在作用域中创建自己的存储位置(即对象实例),以便其他作业永远无法访问它们。同意@Servy。你已经有了一个IoC——为什么不直接使用它呢?并不是说数据不能共享(虽然我说的是“不要共享可变数据”),我认为这里的问题是不能通过一些“聚合[根]”提供所有相关数据,这些“聚合[根]”可以与任务“重新关联”。顾名思义,线程局部变量仅适用于以严格的1-1线程任务对应关系保存数据..将参数传递给方法是将参数传递给方法的传统方式。。。为什么要尝试使用线程本地存储?你有什么特别的问题?