使用async void方法运行长寿命操作

时间:2016-01-14 14:02:49

标签: c# .net asynchronous async-await

使用async void方法开始一些长寿命操作是否合适?我知道可以使用NitoTask.Run()从非异步方法运行任务。有什么不同?有没有陷阱?

就我的意思而言,我可以这样写:

async void bar()
{
    try
    {
        //...
    }
    catch (Exception ex)
    {
        // no rethrowing here
    }
}

void foo()
{
    bar();
    // will continue right after 1st await in bar()
    baz();
}

1 个答案:

答案 0 :(得分:2)

在任何情况下,最好使用async Task来获得更好的错误处理行为。你不需要等待结果任务。

在您的代码段中,评论will continue right after 1st await in bar不一定正确。目前bar将同步执行并阻止foo,因为bar没有等待它。

启动长时间运行操作需要使用异步IO或以某种方式使用新线程/任务(Task.Run是合适的)。