1 回答

TA貢獻1801條經驗 獲得超16個贊
async void應該轉換為 anasync Task以及您應該等待Task.Delay而不是調用Thread.Sleep. 如果要異步,則需要一直異步
static async Task Receive(ITdlMessageReceiver receiver, ILogger logger) {
while (true) {
var message = await receiver.ReceiveAsync<TdlMessage<object>>(topic, entity);
if (message != null) {
logger.LogDebug($"Message received. Topic: {topic}. Action: {Enum.GetName(typeof(TopicActions), message.Action)}. Message: {JsonConvert.SerializeObject(message)}.");
}
await Task.Delay(sleepTime);
}
}
嘗試使代碼一直異步,是的,但是作為控制臺應用程序(單線程),您將被允許調用Wait()該Receive方法,Main因為它不會混合調用會導致異步流出現問題。
public static void Main(string[] args) {
//...
//...
//...
Receive(receiver, logger).Wait();
}
- 1 回答
- 0 關注
- 172 瀏覽
添加回答
舉報