使用async void
方法开始一些长寿命操作是否合适?我知道可以使用Nito或Task.Run()
从非异步方法运行任务。有什么不同?有没有陷阱?
就我的意思而言,我可以这样写:
async void bar()
{
try
{
//...
}
catch (Exception ex)
{
// no rethrowing here
}
}
void foo()
{
bar();
// will continue right after 1st await in bar()
baz();
}
答案 0 :(得分:2)
在任何情况下,最好使用async Task
来获得更好的错误处理行为。你不需要等待结果任务。
在您的代码段中,评论will continue right after 1st await in bar
不一定正确。目前bar
将同步执行并阻止foo
,因为bar
没有等待它。
启动长时间运行操作需要使用异步IO或以某种方式使用新线程/任务(Task.Run
是合适的)。