.NET Core 2.1, Manjuro Linux не работает без ConfigureAwait (false) - PullRequest
0 голосов
/ 30 августа 2018

Я ищу рабочие теории, потому что я ничего не понимаю.
Насколько мне известно в .NET Core, ConfigureAwait(false) не имеет отношения к . Однако у меня есть блок кода, который зависает в Manjuro Linux, если я не использую ConfigureAwait(false). Он не зависает ни в 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)).

Наконец, я вызываю эту функцию из теста xUnit с dotnet test.

Вопрос

Есть теория о том, почему такое могло произойти?

1 Ответ

0 голосов
/ 08 декабря 2018

Как вы, возможно, знаете, Configure(await) в NetFramework говорят, что не используют информацию из контекста синхронизации, поэтому, если этот контекст не существует в .NET Core - конечно, эта функция ничего не делает.

К сожалению, ваш код в github изменился, поэтому не ясно, в чем вопрос. Поэтому мой совет - пожалуйста, прочитайте это объяснение от Стивена Клири.

...