Я пишу универсальный класс Future<T>
, который инкапсулирует получение значения асинхронно, и я заметил, что большинство существующих реализаций в сети имеют такой контракт:
public class Future<T>
{
public Future(Func<T> func); // kicks off the async operation
public T Value { get; } // gets the value and blocks if the async operation isn't done
}
Это немедленно заставляет меня захотеть добавить событие Completed в реализацию, чтобы мне не приходилось запрашивать значение, когда я хочу получить асинхронное значение, и знать, когда это будет сделано. Я заметил, что библиотека параллельного программирования реализует фьючерсы таким образом, но мне было любопытно, почему во многих реализациях нет этого события. Я что-то пропустил? Должен ли Фьючерс иметь Завершенное событие или нет? Или это просто зависит от вашего контекста?