0

我正在根据这篇文章使用 core3.1 编写一个最简单的调用者控制台应用程序。当我更改channel.Open().Wait(5000);为 时await channel.Open();,它卡在了 line 处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

为什么?不是在等待吗?

4

1 回答 1

1

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

于 2020-07-11T11:02:11.130 回答