[英]What is the difference between these two functions using async/await/TPL?
我想我已经成功地把自己弄糊涂了一天。
public void DoSomething1()
{
Task.Delay(1000);
}
public async void DoSomething2()
{
await Task.Delay(1000);
}
这两个函数在被调用时会发生什么变化有什么区别? 使用不返回Task
的async
方法的目的是什么?
这两个函数在被调用时会发生什么变化有什么区别?
DoSomething1
是一种同步方法。 因此:
DoSomething
任何异常都会直接引发给调用者。 DoSomething2
是一个异步void
方法。 因此:
DoSomething2
开始执行时当前的SynchronizationContext
上重新引发异步延迟的任何异常。 这通常会导致程序终止。 DoSomething2
任何异常也会在SynchronizationContext
上引发,结果相同。 使用不返回任务的异步方法的目的是什么?
async void
并不是一件很自然的事情。 例如,F#中根本不存在等价物。 async void
已添加到C#/ VB,以使事件处理程序变为异步,而无需更改整个事件处理或委派系统。
简而言之,您应该避免async void
,并且只将它们用于事件处理程序(或事件处理程序的逻辑等效项,如MVVM中的ICommand.Execute
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.