如何等待任务在WCF服务操作中完成

时间:2014-09-04 02:10:23

标签: c# wcf asynchronous

如果之前已经提出过这个问题的变体,我很抱歉,但我很难找到适合我目前情况的答案。

我正在开展一个项目,我被要求通过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以其他方式可用。有更好的方法吗?

1 个答案:

答案 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