0

この記事に従って、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 .

なぜ?待って待っていませんか?

4

1 に答える 1

1

メソッド呼び出しproxy.Ping()が Websocket スレッドをブロックします。非同期構文を使用する場合は、Websocket スレッドをブロックしないように注意する必要があります。バージョンを使用しawait proxy.PingAsync()ます。のようなブロッキング コールを行う必要がある場合は、ブロッキング コールを行う前に をConsole.ReadLine()呼び出して Websocket スレッドを解放しawait Task.Yield()てください。

于 2020-07-11T11:02:11.130 に答える