[英]How to wait for a Task to complete in a WCF service operation
抱歉,如果您以前曾提出过此问题的变体,但我一直在努力寻找适合我当前情况的答案。
我正在一个项目中,我被要求通过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
以其他方式使用。 有一个更好的方法吗?
您正在执行的操作应该可以正常工作( 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-和async.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.