Async await .NET Core 2.1,Manjuro Linux在没有ConfigureWait的情况下失败(错误)

Async await .NET Core 2.1,Manjuro Linux在没有ConfigureWait的情况下失败(错误),async-await,.net-core,synchronizationcontext,Async Await,.net Core,Synchronizationcontext,我在寻找工作理论,因为我一窍不通。 据我在.NET Core中所知,ConfigureAwait(false)不过,如果我不使用ConfigureAwait(false),我有一个代码块会在Manjuro Linux上阻塞。它不会在Ubuntu上,也不会在Windows上 环境 dotnet--version给出了2.1.401 仅供参考:Manjuro Linux是基于Arch Linux的(因此它也可能在Arch上失败) 上下文 GitHub上的相关代码块: 等待任务。延迟(1000)。配置

我在寻找工作理论,因为我一窍不通。
据我在.NET Core中所知,
ConfigureAwait(false)
不过,如果我不使用
ConfigureAwait(false)
,我有一个代码块会在Manjuro Linux上阻塞。它不会在Ubuntu上,也不会在Windows上

环境
dotnet--version
给出了
2.1.401

仅供参考:Manjuro Linux是基于Arch Linux的(因此它也可能在Arch上失败)

上下文 GitHub上的相关代码块:

等待任务。延迟(1000)。配置等待(false)

我在启动外部进程之前调用此延迟,然后在延迟之后,另一个等待的异步函数尝试建立与此进程的连接(通过SOCKS5)以检查它是否正确启动:
if(!await IsTorRunningAsync(TorSocks5EndPoint))

最后,我使用
dotnet test
从xUnit测试调用此函数

问题:
关于为什么会发生这样的事情有什么理论吗?

正如您所知,NetFramework中的
配置(等待)
可能会说,不要使用来自同步上下文的信息,因此如果.NET核心中不存在此上下文,那么此函数当然不会执行任何操作


不幸的是,您在github中的代码已经更改,因此不清楚问题是什么。因此,我的建议是——请阅读Stephen Cleary的文章。

我无法说明为什么会发生这种情况,但需要注意的是,不相关的语句只适用于ASP.NET核心(框架),而不适用于.NET核心(运行时)。以.NET内核为目标的东西完全可能有一个
SynchronizationContext
。为了补充Kirk的观点,您可以使用检查当前SynchronizationContext。如果您不需要在延迟之前释放当前线程,只需使用
thread.Sleep
即可。感谢您提供的记录,它也可以使用
thread.Sleep