Dar*_*rko 5 c# multithreading backgroundworker threadpool
我似乎无法找到一种简单的方法来确定线程池何时完成所有排队的任务。我在这里找到了一些答案,但没有一个可以帮助我。
为了简单起见,我们说:
for (int i=0;i<10;i++)
{
threadpool.queueuserworkitem(Go);
}
void Go()
{
Console.WriteLine("Hello");
}
Run Code Online (Sandbox Code Playgroud)
那么,在所有 10 个后台线程完成后,我该如何发送最终的“全部完成”console.writeline 呢?
谢谢
依赖线程池空是不可能的,也是危险的。你能做的就是自己计算你的活动任务。使用监视器的低级方法:
class Program
{
static object _ActiveWorkersLock = new object();
static int _CountOfActiveWorkers;
static void Go(object state)
{
try
{
Console.WriteLine("Hello");
}
finally
{
lock (_ActiveWorkersLock)
{
--_CountOfActiveWorkers;
Monitor.PulseAll(_ActiveWorkersLock);
}
}
}
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
lock (_ActiveWorkersLock)
++_CountOfActiveWorkers;
ThreadPool.QueueUserWorkItem(Go);
}
lock (_ActiveWorkersLock)
{
while (_CountOfActiveWorkers > 0)
Monitor.Wait(_ActiveWorkersLock);
}
Console.WriteLine("All done");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4458 次 |
| 最近记录: |