メソッドからのタスクリターンを使用して、後で使用可能になったときに値を返すようにします。これにより、呼び出し元は、待機を使用してブロックするか、継続をアタッチするか、待機することができます。私が考えることができる最高のものはこれです:
public class Future<T> {
private ManualResetEvent mre = new ManualResetEvent();
private T value;
public async Task<T> GetTask() {
mre.WaitOne();
return value;
}
public void Return(T value) {
this.value = value;
mre.Set();
}
}
これに関する主な問題は、mre.WaitOne()がブロックしていることです。したがって、GetTask()を呼び出すたびに、ブロックする新しいスレッドがスケジュールされると思います。非同期でWaitHandleを待つ方法はありますか、それとも同等の機能を構築するためのヘルパーがすでにありますか?
編集:わかりました、TaskCompletionSourceは私が探しているものであり、私は自分自身の生活を困難にしているだけですか?