【发布时间】:2018-08-30 09:06:35
【问题描述】:
我正在寻找可行的理论,因为我一无所知。
据我对 .NET Core 的了解,ConfigureAwait(false) 是 not relevant. 但是,如果我不使用 ConfigureAwait(false),我的代码块会卡在 Manjuro Linux 上。它不会卡在 Ubuntu 上,也不会卡在 Windows 上。
环境
dotnet --version 给2.1.401
仅供参考:Manjuro Linux 是基于 Arch Linux 的(因此它也可能在 Arch 上失败)。
上下文
GitHub上的相关代码块:https://github.com/zkSNACKs/WalletWasabi/pull/636/files#r213737187
await Task.Delay(1000).ConfigureAwait(false);
我在启动外部进程之前调用此延迟,然后在延迟之后,另一个等待的异步函数尝试建立与此进程的连接(通过 SOCKS5)以检查它是否已正确启动:if (!await IsTorRunningAsync(TorSocks5EndPoint))。
最后我用dotnet test从xUnit测试中调用了这个函数。
问题
关于为什么会发生这种事情的任何理论?
【问题讨论】:
-
我不能说为什么会在这种情况下特别发生,但重要的是要注意 not related 语句仅适用于 ASP.NET Core(框架)而不是比 .NET Core(运行时)。以 .NET Core 为目标的东西完全有可能拥有
SynchronizationContext。 -
补充 Kirk 的观点,您可以使用 docs.microsoft.com/en-us/dotnet/api/… 检查当前的 SynchronizationContext 如果您不需要在延迟前释放当前线程,只需使用
Thread.Sleep -
感谢记录,它也适用于
Thread.Sleep。
标签: async-await .net-core synchronizationcontext