我正在使用的项目是在服务器端使用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