在.NET 4中使用TPL,我正在尝试决定如何设计处理未来的API。我遇到的一种可能性是模仿异步模式但没有End(IAsyncResult)
方法:
public Task<int> BeginGetAge()
{
// create and return task
}
public int GetAge()
{
return this.BeginGetAge().Result;
}
因此,呼叫者可以决定是否调用GetAge()
的阻止或非阻止版本。此外,他们可以进入未来,因此可以在其上构建延续等等。
这个成语有效吗?我缺少哪些明显的缺点或问题?它甚至可能有官方名称吗?
答案 0 :(得分:3)
返回Task
是新的C#5异步方式 - 它被称为TAP:Task-based Asynchronous Pattern。
唯一的区别是该方法名为GetAgeAsync
。
所以,是的 - 建议使用这种方法,因为它可以在发布时轻松移植到C#5异步。
答案 1 :(得分:2)
这个成语对我来说似乎完全有效,并且确实支持基于Task
的异步将是即将发布的.Net版本的一大特色。
但是,我会更改您的实现,因此阻塞方法GetAge
不会调用异步方法然后等待它 - (可能)创建新线程的开销是不必要的。