我正在使用的項目是在服務器端使用WCF服務(代碼位於同一項目中)。我想通過編寫一個使用該服務的PCL來擴展它,並希望使用Async/Await模式實現調用。異步/等待PCL中的WCF客戶端
由於PCL從一開始就不支持Async/Await,我通過Nuget將BCL.Async包添加到項目中。但是每當我嘗試生成代理時,基於任務的異步客戶端都不能被選擇,即生成。通過ChannelFactory手動添加代理在PCL中似乎也不可能。
我目前的方法是生成複製ref類的代理,然後使用TPL提供的任務包裝自己編寫async/await模式。但有沒有更簡單的方法?如何直接使用異步/等待模式手動編寫包裝器,而不會生成具有相同效果的多個異步模式?
不要使用TPL /'Task.Run'來「包裝」你的WCF調用。你不是在做真正的無線異步操作,假設你實際上在嵌入式設備上工作,這將會產生巨大的影響。但是,您可以使用'Task.Factory.FromAsync(BeginXXX,EndXXX)'方法......這樣可以正常工作。 – Aron
@Aron,感謝您的輸入。 TPL鏈接實際上符合你提到的方法,所以我想這將是正確的路徑,除了我可以以某種方式寫/生成基於wcf客戶端的任務。 – Mark
我知道有兩種方法。首先,爲您的接口使用直接引用(與WSDL相對)(我建議,當您的客戶端和服務器從相同的回購開發時)。其次,是使用'partial'關鍵字手動添加異步方法。 – Aron