这个TPL成语是否存在?

时间:2012-01-24 16:54:50

标签: c# .net-4.0 asynchronous task-parallel-library idioms

在.NET 4中使用TPL,我正在尝试决定如何设计处理未来的API。我遇到的一种可能性是模仿异步模式但没有End(IAsyncResult)方法:

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

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

因此,呼叫者可以决定是否调用GetAge()的阻止或非阻止版本。此外,他们可以进入未来,因此可以在其上构建延续等等。

这个成语有效吗?我缺少哪些明显的缺点或问题?它甚至可能有官方名称吗?

2 个答案:

答案 0 :(得分:3)

返回Task是新的C#5异步方式 - 它被称为TAP:Task-based Asynchronous Pattern

唯一的区别是该方法名为GetAgeAsync

所以,是的 - 建议使用这种方法,因为它可以在发布时轻松移植到C#5异步。

答案 1 :(得分:2)

这个成语对我来说似乎完全有效,并且确实支持基于Task的异步将是即将发布的.Net版本的一大特色。

但是,我会更改您的实现,因此阻塞方法GetAge不会调用异步方法然后等待它 - (可能)创建新线程的开销是不必要的。