不能在呼叫者和被呼叫者上使用 await 吗?

can't use await on caller and callee?

我正在根据此 article 使用 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.

为什么?await不是在等吗?

您的方法调用 proxy.Ping() 阻塞了 Websocket 线程。如果你使用异步语法,你应该小心不要阻塞 Websocket 线程。使用 await proxy.PingAsync() 版本。如果您需要进行阻塞调用,例如 Console.ReadLine(),请确保在进行阻塞调用之前通过调用 await Task.Yield() 释放 Websocket 线程。