检测整个线程组何时完成处理的最佳实践是什么?我有一个进程将查询 [长期运行] Web 服务以获取任意数量的对象,然后需要在所有对象都成功完成后采取事务操作。我目前正在使用 .Net 线程池中的委托异步运行它们。同步运行它们,违背了在多个线程上运行它们的目的......我还能如何检测所有何时完成?我虽然使用了一个计数器,(又名 COM 引用计数)为到达线程增加它,并在回调函数中减少它,并保留一个动态列表,其中包含对其中每个线程的引用,以显式跟踪每个线程当它们完成时,但这两种解决方案似乎都有些笨拙......
感谢所有人...根据您的建议,并且需要将对象实例传递给异步线程(由下面的 ref 变量 uPL 表示),我正在使用以下代码...注意:IEEDAL.GetUsagePayloadReadings(uPL1)是远程 Web 服务调用
foreach (MeterChannel chgChan in chgChs)
foreach (UsagePayload uPL in chgChan.IntervalPayloads)
{
ManualResetEvent txEvnt = new ManualResetEvent(false);
UsagePayload uPL1 = uPL;
ThreadPool.QueueUserWorkItem(
delegate(object state)
{
if (!uPL1.HasData)
IEEDAL.GetUsagePayloadReadings(uPL1);
UsageCache.PersistPayload(uPL1);
SavePayLoadToProcessFolder(uPL1);
txEvnt.Set();
} );
waitHndls.Add(txEvnt);
}
WaitHandle.WaitAll(waitHndls.ToArray());