在.NET 4中使用TPL,我試圖決定如何設計處理未來的API。這發生在我是模仿異步模式,但沒有End(IAsyncResult)
方法一種可能性:這個TPL習語存在嗎?
public Task<int> BeginGetAge()
{
// create and return task
}
public int GetAge()
{
return this.BeginGetAge().Result;
}
因此,主叫方可以決定是否調用阻塞或非阻塞的GetAge()
版本。而且,他們可以訪問未來,因此可以在它之上構建延續等等。
這個習語有效嗎?我有什麼明顯的缺點或問題,我錯過了?它可能甚至有一個正式的名字?
我相信你的第二種情況會從'await'中大大受益。 – user7116
僅供參考,Stephen Toub發佈了關於此內容(爲異步方法提供同步包裝) - tl; dr避免它:)請參閱http://blogs.msdn.com/b/pfxteam/archive/2012/04/13/10293638。 aspx和http://blogs.msdn.com/b/pfxteam/archive/2012/03/24/10287244.aspx –