为什么在finally块中不允许等待?

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块中得到支持)