我正在使用異步CTP編寫IO沉重的控制檯應用程序。但我遇到異常問題。使用void處理異步異常
public static void Main()
{
while (true) {
try{
myobj.DoSomething(null);
}
catch(Exception){}
Console.Write("done");
//...
}
}
//...
public async void DoSomething(string p)
{
if (p==null) throw new InvalidOperationException();
else await SomeAsyncMethod();
}
並執行以下操作:「完成」被寫入到控制檯,然後我得到的調試異常,然後我按繼續我的程序中存在。
什麼給?
我不能調用t.Wait(),因爲它阻塞了主控制檯線程,所以我不能輸入任何東西,所以SomeAsyncMethod永遠不會完成(對於我的用法見:http://stackoverflow.com/questions/6145246/how-to-write-c-5-async) – TDaver 2011-06-08 20:14:54
但我想通了!我不會等待任務,將它們放入列表中,並且在每次IO操作(當它們可以拋出異常時)之後,我檢查列表是否有任何任務出錯! – TDaver 2011-06-08 20:56:58
是的,通常最好啓動所有的任務,將它們收集到一個列表中,然後將其收集到一個TaskEx.WhenAll(listOfTasks).Wait()當你想收集所有的工作 – 2011-06-08 23:48:54