Используя TPL с .NET 4, я пытаюсь решить, как разработать API, которые имеют дело с фьючерсами. Одна из возможностей, которая пришла мне в голову, - имитировать шаблон async, но без метода End(IAsyncResult)
:
public Task<int> BeginGetAge()
{
// create and return task
}
public int GetAge()
{
return this.BeginGetAge().Result;
}
Таким образом, вызывающие могут решить, вызывать ли блокирующую или неблокирующую версию GetAge()
. Более того, они имеют доступ к будущему, поэтому могут строить продолжения поверх него и т.д.
Правомерна ли эта идиома? Есть ли какие-то очевидные недостатки или проблемы, которые я упускаю? Возможно, у нее даже есть официальное название?