Существует ли эта идиома в TPL?

Используя TPL с .NET 4, я пытаюсь решить, как разработать API, которые имеют дело с фьючерсами. Одна из возможностей, которая пришла мне в голову, - имитировать шаблон async, но без метода End(IAsyncResult):

public Task<int> BeginGetAge()
{
    // create and return task
}

public int GetAge()
{
    return this.BeginGetAge().Result;
}

Таким образом, вызывающие могут решить, вызывать ли блокирующую или неблокирующую версию GetAge(). Более того, они имеют доступ к будущему, поэтому могут строить продолжения поверх него и т.д.

Правомерна ли эта идиома? Есть ли какие-то очевидные недостатки или проблемы, которые я упускаю? Возможно, у нее даже есть официальное название?

5
задан Kent Boogaart 24 January 2012 в 16:54
поделиться