如果之前曾詢問過此問題的變體,我表示歉意,但我正在努力尋找適用於我目前情況的答案。如何等待任務在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