如果之前曾询问过此问题的变体,我表示歉意,但我正在努力寻找适用于我目前情况的答案。如何等待任务在WCF服务操作中完成
我正在一个项目中,我被要求通过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,但我不能保证其他客户端将是.NET(或.NET 4.5)。在服务合同中使用任务会导致这些客户端出现问题? –
sellmeadog
2014-09-04 03:17:52
@sellmeadog您不应该为客户端和服务器端合同重复使用相同的接口。服务器端接口可以是'Task> GetAllContactsAsync();'和客户端接口可以是'IEnumerable GetAllContacts()',它将会与WCF一起工作。 WCF会自动向客户端公开每种方法的同步和异步版本,但服务器只需要实现其中的一种。 –
2014-09-04 03:54:48