为什么等待是不允许在最后的块?
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中显然不再是真的
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)