【发布时间】:2012-01-24 16:54:50
【问题描述】:
将 TPL 与 .NET 4 结合使用,我试图决定如何设计处理未来的 API。我想到的一种可能性是模仿异步模式但没有End(IAsyncResult) 方法:
public Task<int> BeginGetAge()
{
// create and return task
}
public int GetAge()
{
return this.BeginGetAge().Result;
}
因此,调用者可以决定是调用GetAge() 的阻塞版本还是非阻塞版本。此外,他们可以访问未来,因此可以在其之上构建延续等等。
这个成语有效吗?有没有我遗漏的明显缺点或问题?它甚至可能有正式名称吗?
【问题讨论】:
-
我相信您的第二个案例将从
await中受益匪浅。 -
仅供参考,Stephen Toub 已经发布了关于此的信息(为异步方法提供同步包装器)-tl;dr 避免它:) 请参阅 blogs.msdn.com/b/pfxteam/archive/2012/04/13/10293638.aspx 和 blogs.msdn.com/b/pfxteam/archive/2012/03/24/10287244.aspx
标签: c# .net-4.0 asynchronous task-parallel-library idioms