.net - 调用异步方法而不等待

标签 .net asynchronous async-await

我当前正在调用异步方法,并且不想等待它。我不需要 async 方法的结果,并且不想在 IO 期间阻塞。但是,如果async方法中抛出错误,我想catch它。到目前为止我已经:

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

这不会捕获 Main 中的 MyAyncMethod 中引发的异常。我做错了什么吗?

最佳答案

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() 并且您的程序在后台工作完成处理之前自行关闭。

关于.net - 调用异步方法而不等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33355656/

相关文章:

javascript - Promise.all 与 wait Promise.all 示例错误

.net - 从窗口句柄获取窗口 z 索引

.net - 如何将边框样式应用于 NPOI 工作簿单元格

.net - oData v4 简单来说什么是函数和 Action ?

c# - 具有异步表单工厂的简单注入(inject)器

javascript - Node.js 异步/等待模块导出

c# - 如何明确表示不抛出异常?

python - IPython - 是否可以使用 Tornado ioloop?

javascript - Node.js 异步,但仅处理第一个肯定/定义的结果

c# - 单击按钮期间是否可以等待异步任务?