不能在呼叫者和被呼叫者上使用 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 线程。
我正在根据此 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 线程。