Jer*_*ter 2 c# parallel-processing multithreading
我正在开发一个Windows服务项目.该服务启动引擎.引擎有一对多的"轮询器",我想每个都在自己的线程中运行,这样它们就可以并行进行"轮询".我在引擎的Start()方法中使用Parallel.ForEach来获取轮询器轮询并且工作正常.我希望服务能够启动引擎,然后继续做其他事情(比如报告引擎的状态以及它在不同点或其他方面的轮询).这是在没有主线程被阻止的情况下启动引擎的最佳方法:
System.ComponentModel.BackgroundWorker worker = new System.ComponentModel.BackgroundWorker();
worker.DoWork += new System.ComponentModel.DoWorkEventHandler((sender, e) => Parallel.ForEach(Pollers.Where(p => p.Active), p => p.StartPolling()));
worker.RunWorkerAsync();
Run Code Online (Sandbox Code Playgroud)
或者有没有人有更好的方法来做到这一点?
我会使用.Net 4任务库,比旧的Thread模型更清晰
// Create a task and supply a user delegate by using a lambda expression.
var taskA = new Task(() =>Parallel.ForEach(Pollers.Where(p => p.Active), p =>p.StartPolling()));
// Start the task.
taskA.Start();
Run Code Online (Sandbox Code Playgroud)
编辑:您需要包含此命名空间: System.Threading.Tasks
EDIT2:是的,如果您使用的话可能会更好
Task.Factory.StartNew(() =>{ Parallel.ForEach(Pollers.Where(p => p.Active);})
但是你应该知道它并不总是最好的方式,取决于代码,查看 这个MSDN博客,阅读更多有关两者之间的差异
| 归档时间: |
|
| 查看次数: |
1437 次 |
| 最近记录: |