Korzystając z TPL z .NET 4, staram się zdecydować, jak zaprojektować interfejsy API, które zajmują się przyszłością. Jedną z możliwości, które dotarło do mnie to, aby naśladować wzór asynchronicznej ale bez metody End(IAsyncResult)
:Czy istnieje ten idiom TPL?
public Task<int> BeginGetAge()
{
// create and return task
}
public int GetAge()
{
return this.BeginGetAge().Result;
}
Jako takie, dzwoniący może zdecydować, czy zadzwonić blokowanie lub non-blocking wersja GetAge()
. Co więcej, mają dostęp do przyszłości, dzięki czemu można konstruować kontynuacje na jej szczycie itp.
Czy ten idiom jest ważny? Czy są jakieś oczywiste wady lub problemy, których mi brakuje? Czy może ma nawet oficjalną nazwę?
Twój drugi przypadek bardzo skorzysta na "oczekującym" moim zdaniem. – user7116
FYI, Stephen Toub opublikowal o tym (oferowanie wrapperów sync dla metod asynchronicznych) - tl; dr uniknij tego :) zobacz http://blogs.msdn.com/b/pfxteam/archive/2012/04/13/10293638. aspx i również http://blogs.msdn.com/b/pfxteam/archive/2012/03/24/10287244.aspx –