Sle*_*idi 10 c# async-await c#-5.0
为什么await不允许一个finally块?
public async void Fn()
{
try
{
}
finally
{
await Task.Delay(4000);
}
}
Run Code Online (Sandbox Code Playgroud)
知道可以Awaiter手动获取
public void Fn()
{
try
{
}
finally
{
var awaiter = Task.Delay(4000).GetAwaiter();
}
}
Run Code Online (Sandbox Code Playgroud)
Bla*_*keH 13
取自:哪里不能使用"等待"?
在捕获或最终块内.您可以在try块内部使用"await",无论它是否具有关联的catch或finally块,但您不能在catch或finally块中使用它. 这样做会破坏CLR异常处理的语义.
在C#6.0中,这显然不再适用
摘自:AC#6.0语言预览版
C#6.0消除了这个缺陷,现在允许在catch和finally块中等待调用(它们已在try块中得到支持)