如果之前已经提出过这个问题的变体,我很抱歉,但我很难找到适合我目前情况的答案。
我正在开展一个项目,我被要求通过WCF服务公开基于任务的提供程序的操作。提供者接口明确定义Task<T>
作为每个方法的返回类型,这是一个例子:
public interface IContactProvider
{
Task<IEnumerable<Contact>> GetAllContacts();
}
为了将此作为WCF服务公开,我基本上定义了提供者接口的“同步”版本,以用作服务合同,从而产生如下服务实现:
public class ContactService : IContactService
{
private IContactProvider contactProvider;
public IEnumerable<Contact> GetAllContacts()
{
return contactProvider.GetAllContacts().Result;
}
}
我的直觉告诉我,我在这里做错了,我应该“等待”Result
以其他方式可用。有更好的方法吗?
答案 0 :(得分:2)
你正在做什么应该正常工作(Result
将阻止任务完成),但你使用的是.NET 4.5吗?如果是这样,您只需声明服务操作合同即可直接返回async Task<T>
。这样,您的客户端将自动获得同步或异步调用它的选项(通过生成的服务客户端)。
以下是我发现的帖子比MSDN文档更有用:http://blog.vuscode.com/malovicn/archive/2012/01/21/what-is-new-in-wcf-in-net-4-5-taskt-and-async.aspx