小编use*_*050的帖子

在try/catch/finally中等待的好方法?

我需要asynccatch块中调用一个方法,然后再次抛出异常(带有它的堆栈跟踪),如下所示:

try
{
    // Do something
}
catch
{
    // <- Clean things here with async methods
    throw;
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是你无法await在一个catch或一个finally块中使用.我学会了它是因为编译器没有任何方法可以回到catch块中来执行你的await指令之类的东西......

我试图用来Task.Wait()替换await,我遇到了僵局.我在网上搜索了如何避免这种情况并找到了这个网站.

由于我无法更改async方法,也不知道它们是否使用ConfigureAwait(false),因此我创建了这些方法,这些方法Func<Task>在我们处于不同的线程(以避免死锁)并等待其完成时启动异步方法:

public static void AwaitTaskSync(Func<Task> action)
{
    Task.Run(async () => await action().ConfigureAwait(false)).Wait();
}

public static TResult AwaitTaskSync<TResult>(Func<Task<TResult>> action)
{
    return Task.Run(async () => await action().ConfigureAwait(false)).Result;
}

public static void AwaitSync(Func<IAsyncAction> action)
{
    AwaitTaskSync(() …
Run Code Online (Sandbox Code Playgroud)

.net c# exception-handling async-await c#-5.0

89
推荐指数
3
解决办法
4万
查看次数

标签 统计

.net ×1

async-await ×1

c# ×1

c#-5.0 ×1

exception-handling ×1