問題タブ [taskcompletionsource]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
322 参照

c# - TaskCompletionSource のパフォーマンスが遅い

同期メソッドで TaskCompletionSource の複数のインスタンスをループすると、5 つを超えるプログラムの実行が遅くなりますが、非同期メソッドではこの問題はありません。

これは問題のあるコードです 同期方式を使用すると、実行が遅くなり、約 1 秒で 1 つ作成されます

これは問題のないコードです,非常に高速に実行します

0 投票する
2 に答える
441 参照

c# - TaskCompletionSource のコレクションを形成する方法型安全性を保つ

私はいくつかの非同期メソッドを持っています:

上記は、簡単にするための半疑似コードです。私は次のようにメソッドの1つを呼び出します:

A a = await service.GetAAsync();

ここでの問題はTaskCompletionSource<T>一般的なことです。このように 100 個のメソッドがある場合、戻り値の型ごとに変数を作成する必要があります。ただし、一度に呼び出すことができるメソッドは1 つだけTaskCompletionSourceなので、 にタイプせずに単一のを使用すると便利ですobject (TaskCompletionSource<object>)

私はしたくない:

object a = await service.GetAAsync();

クライアントによるキャストが必要になるためです。したがって、最善の解決策は、単一の を使用することですが、TaskCompletionSource何らかの方法で入力することです。または、代わりに の Dictionary を持つこともできTaskCompletionSourceます。どちらも私には不可能に思えます。

これをどのように解決すればよいですか?

アップデート:

私の状況の背景については、次をご覧ください。 切断されたシナリオで同期コードを非同期待機にラップする