我们在2008年在.NET 3.5上构建了一个强大的WCF客户端(现在在.NET 4.0下重新编译),它通过net.tcp绑定与我们自己的WCF服务进行通信。健壮的客户端使用ChannelFactory< IOurServiceInterface>()来生成服务代理,我们通过该服务代理对服务进行同步调用。我们从每次通话中得到结果;我们没有单向电话。
我们正在迁移到.NET 4.5 / C#5,并希望使用async / await / TAP使客户端异步。如何以最佳方式执行此操作,从而获得干净的代码和良好的运行时性能?
(我看过关于这个主题的MS文档,但是它总是讨论运行svcutil。我们不使用svcutil;我们直接使用ChannelFactory。另外:MS文档用于在.NET下使用通道工厂异步调用操作4.5自.NET 3.0天以来没有变化。似乎ChannelFactory没有接受新的异步。)
答案 0 :(得分:7)
您可以使用TaskFactory.FromAsync
将现有APM(Begin*
/ End*
)端点打包到TAP就绪Task
。
您可能会发现我的Async WCF Today and Tomorrow post有帮助,其中显示了如何在VS2012之前的svcutil中使用TAP。
答案 1 :(得分:3)
您看到this了吗?
我举了一个等待[OperationContract]
返回Task<TResponse>
的例子。