如何创建后台工作人员池

本文关键字:后台 工作人员 创建 何创建 | 更新日期: 2023-09-27 18:26:50

我发现我很享受通过BackgroundWorkers异步运行代码的简单性。我通过例子或试错教会了自己它的用途、陷阱、安全线程等,与其说是理论,不如说是我的致命弱点。

我已经做了我的研究,但有一件事我很少谈论,那就是我如何才能有效地创建和使用一批BackgroundWorkers?或者,有什么比使用BWs更简单的替代方案呢?

我将说明我遇到的问题:我有一个任务X、Y和Z,每个任务都很密集,因此它会挂断UI线程。我决定,即使这个代码只执行一次,BWs也是答案。我学会了如何使用它们,一些安全的线程实践,然后继续我的路。很快,我的代码看起来像:BW1、BW2、BW3等等。

然后我开始更加熟悉它们,并真正将代码放入BWs中,这些代码可以用于硬件监控或其他无限循环/始终运行的项目。我仍然遇到了BW5,BW6…问题。

我找到了一种创造性的方法来拥有多用途的BackgroundWorkers,方法是在调用RunWorkerSynchronouss()之前设置一个全局字符串变量,然后我可以在BackgroundWorker中设置Nested If/Else或Switches,以根据我将字符串变量设置为的值来执行所需的代码。然而,我觉得我只是在自我学习的极限上跳舞。

那么,有人能指导我理解创建线程池/BW的概念吗?并在整个程序中根据需要使用它们,回收线程而不是显式地创建每个线程,然后让几十名后台工作人员来处理特定的密集目的吗

注意:我不是一个很好的程序员,所以我在寻找简单的函数示例或解释。欢迎任何帮助!

如何创建后台工作人员池

我强烈建议使用Tasks来实现您想要的目标。这管理了从线程池中选择线程、在多个核心之间平衡线程等所有艰苦工作。

如果你有功能:

public void DoSomething()
{
    //things happen here
}

然后您可以使用启动任务

var task = Task.Factory.StartNew(DoSomething);

var task = new Task(DoSomething);

你可以在http://msdn.microsoft.com/en-us/library/dd537609(v=vs.110).aspx

您不需要对它们进行池化。它们在内部使用ThreadPool,这已经是一个线程池了。

线程/线程池或后台工作者