为什么await
块中不允许finally
?
public async void Fn()
{
try
{
}
finally
{
await Task.Delay(4000);
}
}
知道可以手动获取Awaiter
public void Fn()
{
try
{
}
finally
{
var awaiter = Task.Delay(4000).GetAwaiter();
}
}
答案 0 :(得分:13)
在捕获或最终阻止内部。你可以在a里面使用“await” 尝试阻止,无论它是否有关联或最终 块,但你不能在catch或finally块中使用它。 这样做会破坏CLR异常处理的语义。
在C#6.0中显然不再适用
C#6.0消除了这个缺陷,现在允许在catch和finally块中进行await调用(它们已经在try块中得到支持)