マルチスレッドプログラムですべてのスレッドがいつ終了したか知りたい
プーリングのようなものなしで
while(!allThreadFinished){
thread.sleep(100);
}
ソリューションはモニターを使用する必要がありますが、それが正しいことをどのように承認できますか。次のコードの「SomeMethod」はネットワークを使用しているため、時間がかかります。
public object SomeMethod(string input);
public object[] MultiThreadMethod(string[] inputs) {
var result = new object[inputs.Count()];
int i = 0;
foreach (var item in inputs) {
BackgroundWorker work = new BackgroundWorker();
work.DoWork += (sender, doWorkEventArgs) => { doWorkEventArgs.Result = SomeMethod(item); };
work.RunWorkerCompleted += (sender, runWorkerCompletedEventArgs) => {
result[i] = runWorkerCompletedEventArgs.Result;
};
i++;
work.RunWorkerAsync();
}
/////////////////////////////////////////////////////////////
//**wait while all thread has been completed**
/////////////////////////////////////////////////////////////
return result;
}