我想知道,當所有的線程在多線程程序等待多個後臺線程
已完成不一樣的東西彙集
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;
}
由於您使用'BackgroundWorker'一定意味着你是在GUI環境中,在這種情況下,你不應該阻止,直到他們全部完成,你應該繼續上一旦完成,只需運行一些代碼即可。要麼是這樣,要麼你不在UI環境中(或者已經在後臺線程中),在這種情況下,你不應該在這裏使用BackgroundWorker。 – Servy
你的意思是使用Thread更好? – Ali
嗯,這取決於。你是否在GUI環境中?此方法是否從UI線程運行?如果是這樣,你應該不會被阻止,你應該創建後臺任務,然後在完成所有代碼時執行一些代碼。如果您不在UI線程中並且確實需要阻止,那麼您應該使用'Task'而不是BackgroundWorkers(或線程)。 – Servy