我目前正在调用async
方法,并且不想await
它。我不需要async
方法的结果,也不想在IO期间阻止。但是,如果async
方法中出现错误,我希望catch
。到目前为止,我有:
public static void main () {
MyAsyncMethod().
ContinueWith(t => Console.WriteLine(t.Exception),
TaskContinuationOptions.OnlyOnFaulted);
//dostuff without waiting for result
}
这不会捕获MyAyncMethod
中Main
引发的异常。有什么我做错了吗?
答案 0 :(得分:1)
async-await和ContinueWith
可以正常工作,但它充满了令人头疼的问题。将错误处理重构为方法并将其放入其中更容易,然后您可以从主方法中调用该新方法。
public static void main () {
var task = DoMyAsyncMethod();
//dostuff without waiting for result
//Do a wait at the end to prevent the program from closing before the background work completes.
task.Wait();
}
private static async Task DoMyAsyncMethod()
{
try
{
await MyAsyncMethod();
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
我怀疑你正在处理的真正问题是缺少Wait()
并且你的程序在你的后台工作完成处理之前就已经关闭了。