在不等待

时间:2015-10-26 21:08:18

标签: .net asynchronous async-await

我目前正在调用async方法,并且不想await它。我不需要async方法的结果,也不想在IO期间阻止。但是,如果async方法中出现错误,我希望catch。到目前为止,我有:

public static void main () {
    MyAsyncMethod().
    ContinueWith(t => Console.WriteLine(t.Exception),
           TaskContinuationOptions.OnlyOnFaulted);
    //dostuff without waiting for result
}

这不会捕获MyAyncMethodMain引发的异常。有什么我做错了吗?

1 个答案:

答案 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()并且你的程序在你的后台工作完成处理之前就已经关闭了。