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

为什么等待是不允许在最后的块?
public async void Fn()
{
    try
    {
    }
    finally
    {
        await Task.Delay(4000);
    }
}

知道有可能手动获取Awaiter

public void Fn()
{
    try
    {
    }
    finally
    {
        var awaiter = Task.Delay(4000).GetAwaiter();
     }
}

解决方法

取自: Where can’t I use “await”?

Inside of a catch or finally block. You can use “await” inside of a
try block,regardless of whether it has associated catch or finally
blocks,but you can’t use it inside of the catch or finally blocks.
Doing so would disrupt the semantics of CLR exception handling.

这在C#6.0中显然不再是真的

取自:A C# 6.0 Language Preview

C# 6.0 does away with this deficiency,and Now allows await calls within both catch and finally blocks (they were already supported in try blocks)

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...