C# 这个第三方物流成语存在吗?

C# 这个第三方物流成语存在吗?,c#,.net-4.0,asynchronous,task-parallel-library,idioms,C#,.net 4.0,Asynchronous,Task Parallel Library,Idioms,使用TPL和.NET4,我试图决定如何设计处理未来的API。我想到的一种可能性是模拟异步模式,但没有End(IAsyncResult)方法: public Task<int> BeginGetAge() { // create and return task } public int GetAge() { return this.BeginGetAge().Result; } 公共任务开始日期() { //创建并返回任务 } 公共整数GetAge() { 返回此.

使用TPL和.NET4,我试图决定如何设计处理未来的API。我想到的一种可能性是模拟异步模式,但没有
End(IAsyncResult)
方法:

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

public int GetAge()
{
    return this.BeginGetAge().Result;
}
公共任务开始日期()
{
//创建并返回任务
}
公共整数GetAge()
{
返回此.BeginGetAge().Result;
}
因此,调用者可以决定调用
GetAge()
的阻塞版本还是非阻塞版本。此外,他们可以进入未来,因此可以在未来的基础上继续建设


这个成语有效吗?我有没有遗漏任何明显的缺点或问题?它甚至可能有一个正式名称吗?

返回一个
任务
是新的C#5异步方式-它被称为TAP:

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


因此,是的-建议使用这种方法,因为它在发布时可以很容易地移植到C#5异步。

这个习惯用法对我来说似乎非常有效,并且支持基于
任务的
异步将是即将发布的.Net版本中的一个重要功能


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

您的第二个案例将从
await
中受益匪浅。仅供参考,Stephen Toub已经发布了相关信息太长了,读不下去了,(也可以避免它:),也可以交换方法之间的关系,并有<代码>初学者>(<代码)>返回<代码>任务。工厂。StartNew(()= GETAGE())<代码>。即便如此,这是否必要还是要由调度程序来决定。但我接受你的观点,肖恩的建议是有道理的。