首页 > 解决方案 > 如何在.net核心的同步方法中调用异步方法

问题描述

我找到了一些在同步方法上调用异步方法的方法,但我不知道.net 核心中最好的方法是什么,为什么

DebugLog.Log(ex.ToString()).GetAwaiter();
System.Threading.Tasks.Task.Run(async () => await DebugLog.Log(ex.ToString()));
DebugLog.Log(ex.ToString()).RunSynchronously();
DebugLog.Log(ex.ToString()).ConfigureAwait(default);

标签: asynchronous.net-coreasync-await

解决方案


我不知道.net core 中最好的方法是什么,为什么?

没有最好的办法。如果有,那么每个人都会使用它。

多种方法,每种方法都有自己的缺点。最常见的两种是:

  1. GetAwaiter().GetResult()(即直接阻塞) -可以死锁
  2. Task.Run(...).GetAwaiter().GetResult()...(即,阻塞线程池线程) - 如果需要当前上下文,则不起作用。

RunSynchronously 永远不应该使用


推荐阅读