Не понимаю почему ConfigureAwait(true) может быть причиной беды?
Вот пример кода:
private async void button1_Click(object sender, EventArgs e)
{
int result = DoSomeWorkAsync().Result; // 1
}
private async Task<int> DoSomeWorkAsync()
{
await Task.Delay(100).ConfigureAwait(true); //2
return 1;
}
Вот его описание, но то ли тут опечатка/кривой перевод или я чего то не понимаю. Почему дедлок?:
Клик по кнопке здесь приводит к дедлоку. UI поток стартует новый I/O поток на строке «2» и уходит в спящий режим на строке «1», ожидая завершения работы. После того как I/O поток заканчивает выполнение, оставшаяся часть метода DoSomeWorkAsync передается на выполнение вызывающему (UI) потоку. Но тот в это время находится в спящем режиме, ожидая завершения метода. Дедлок.
.ConfigureAwait()– 4per Dec 14 '18 at 01:46