C# 这个第三方物流成语存在吗?
使用TPL和.NET4,我试图决定如何设计处理未来的API。我想到的一种可能性是模拟异步模式,但没有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() { 返回此.
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())<代码>。即便如此,这是否必要还是要由调度程序来决定。但我接受你的观点,肖恩的建议是有道理的。