C# PCL中的异步/等待WCF客户端

C# PCL中的异步/等待WCF客户端,c#,wcf,async-await,portable-class-library,C#,Wcf,Async Await,Portable Class Library,我正在处理的项目在服务器端使用WCF服务(代码在同一个项目中)。我想通过编写一个PCL来扩展它,该PCL使用该服务并希望使用Async/Await模式实现调用 由于PCL从一开始就不支持Async/Await,我通过Nuget将BCL.Async包添加到项目中。但每当我尝试生成代理时,无法选择基于任务的异步客户端,即生成。在PCL中,似乎也不可能通过ChannelFactory手动添加代理 我当前的方法是复制ref类生成代理,然后使用提供的任务包装器自己编写异步/等待模式。但是有更简单的方法吗?

我正在处理的项目在服务器端使用WCF服务(代码在同一个项目中)。我想通过编写一个PCL来扩展它,该PCL使用该服务并希望使用Async/Await模式实现调用

由于PCL从一开始就不支持Async/Await,我通过Nuget将BCL.Async包添加到项目中。但每当我尝试生成代理时,无法选择基于任务的异步客户端,即生成。在PCL中,似乎也不可能通过ChannelFactory手动添加代理


我当前的方法是复制ref类生成代理,然后使用提供的任务包装器自己编写异步/等待模式。但是有更简单的方法吗?如何直接使用async/await模式手动编写包装,而不生成具有相同效果的多个async模式?

您是否尝试过在svcUtil.exe工具中使用/async参数


请参阅此处的更多信息。

最后,我生成了代理,并使用TaskFactory手动包装生成的APM模型,以便在PCL内的客户端中生成异步/等待模式。我把它写在这本书里


编辑:更新断开的链接。

不要使用TPL/
任务。运行
以“包装”WCF呼叫。如果您没有执行真正的无线程异步,那么假设您实际使用的是嵌入式设备,这将产生巨大的影响。但是,您可以使用
Task.Factory.fromsync(BeginXXX,EndXXX)
方法…该方法将正常工作。@Aron,谢谢您的输入。TPL链接实际上直接指向您提到的方法,所以我想这是正确的路径,除了我可以以某种方式编写/生成基于任务的wcf客户端。我知道两种方法。第一种方法是对接口使用直接引用(与WSDL相反)(我建议,当您的客户机和服务器是从同一个repo开发时使用直接引用)。第二,是使用
partial
关键字手动添加异步方法。@Mark-你得到正确答案了吗?你能和我们分享一下吗?我也被这个场景困住了@丹尼斯,我还没到那里。。但是一旦我有了一个有效的解决方案,我就会发布一个更新。不要使用/async参数。它用于生成旧式的APM方法。.NET 4.5附带的scvutil版本通过以下方式生成任务方法:default@PanagiotisKanavos,我没有测试这个方法,我是基于上面指向.NET4.5文档的文档来测试的。这是一个新事物,因为文档中说默认值是相反的。这不是一个新事物,它是这样工作的。文档不清楚,甚至没有包含所有参数。命令行帮助说明:“生成同步和开始/结束异步方法签名。默认值:生成同步和基于任务的异步方法签名。”甚至还有一个/syncOnly开关,用于防止生成任何类型的异步代码链接断开:(