Я бы хотел использовать возврат задачи из метода, чтобы вернуть значение, когда оно станет доступным позже, чтобы вызывающий мог либо заблокировать с помощью Wait, либо присоединить продолжение, либо даже дождаться его. Лучшее, о чем я могу думать, это следующее:
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 в асинхронном режиме или уже есть помощник для создания эквивалентной функциональности?
Edit: Хорошо, TaskCompletionSource то, что я ищу, и я просто усложняю себе жизнь?