我正在使用异步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