не может использовать ожидание для вызывающего и вызываемого?
Я пишу простейшее приложение консоли вызывающего абонента согласно этой статье с core3.1. Когда я изменилсяchannel.Open().Wait(5000);
к await channel.Open();
, он застрял на линии proxy.Ping();
.
И это также можно найти у вызываемого:
Task openTask = channel.Open();
openTask.Wait();
не может заменить await channel.Open();
Task<IAsyncDisposable> registrationTask = realm.Services.RegisterCallee(instance);
registrationTask.Wait();
не может заменить await realm.Services.RegisterCallee(instance);
После использования await программа всегда застревает на строке proxy.Ping();
Решение zipfile.
Почему? Разве это не ожидание?
1 ответ
Ваш вызов метода proxy.Ping()
блокирует поток Websocket. Если вы используете синтаксис async, вы должны быть осторожны, чтобы не заблокировать поток Websocket. Использоватьawait proxy.PingAsync()
версия. Если вам нужно сделать блокирующие звонки, напримерConsole.ReadLine()
, не забудьте освободить поток Websocket, вызвав await Task.Yield()
перед тем, как сделать блокирующий звонок.