スレッドのグループ全体の処理が完了したことを検出するためのベスト プラクティスは何ですか? [長時間実行] Web サービスに任意の数のオブジェクトを照会し、それらすべてが正常に完了したときにトランザクション アクションを実行する必要があるプロセスがあります。現在、.Net スレッド プールのデリゲートを使用して、それらを非同期で実行しています。それらを同期的に実行すると、複数のスレッドで実行する目的が無効になります...すべてが終了したことを他にどのように検出できますか? 私はカウンター(別名COM参照カウント)を使用して、開始するスレッドに到達するためにそれをインクリメントし、コールバック関数でそれをデクリメントし、各スレッドへの参照を含む動的リストを保持して、それぞれを明示的に追跡することを考えましたそれらが完了すると、しかし、これらのソリューションはどちらもちょっとぎこちないようです...
すべてのおかげで... yr の提案に基づいて、オブジェクト インスタンスを非同期スレッド (以下の 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());