对于一个项目,我需要在几分钟内完成一些繁重的工作,然后继续。该过程的某些部分正在获取数据,其他部分正在处理(CPU)。
我有一个带有while循环的三个任务,类似这样(时间3):
private void WorkerA()
{
int cnt = 0;
while ( cnt < _TotalAmountOfItems )
{
_QueueA.TryDequeue(out var item);
if ( group == null )
{
Thread.Sleep(100);
continue;
}
var result = DoWork(item); // or GetFromDb() or BulkInsert(), etc
_QueueB.Enqueue( result );
cnt++;
}
}
然后类似的东西:
var task_a = Task.Run( () => WorkerA() );
var task_b = Task.Run( () => WorkerB() );
var task_c = Task.Run( () => WorkerC() );
Task.WaitAll( task_a, task_b, task_c );
使用cnt < _TotalAmountOfItems
,我从理论上检查了单个工作程序是否完成,因此我们可以关闭该工作程序,最后获得汇总结果,然后照常继续操作。
我看到了很多问题。即如果一个WorkerA崩溃,那么W orkerB和C将永远处于循环状态。。
在重新发明轮子之前,我很确定这个问题过去已经解决了。我需要寻找(C#)的模式是什么?
重要 在这种情况下,我必须绑定到一个进程。我需要这样做几分钟,然后清理我身后的所有东西。我不能永远离开工人。
根据要求提供更多信息: