4
一个好的尝试/捕获/最终解决方案?
我需要async在一个catch块中调用一个方法,然后再次引发异常(及其堆栈跟踪),如下所示: try { // Do something } catch { // <- Clean things here with async methods throw; } 但是很遗憾,您不能await在catch或finally块中使用。我了解到这是因为编译器没有任何办法可以返回一个catch块来执行await指令或类似指令之后的内容... 我试图用它Task.Wait()来替换await,但陷入僵局。我在网上搜索了如何避免这种情况的方法,并找到了该站点。 由于我无法更改async方法,也无法知道它们是否在使用ConfigureAwait(false),因此创建了这些方法,这些方法采用a 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 …