WCF 中的异步操作
asynchronus operation in WCF
我使用的是c#语言。
具有方法 "MethodA" 的简单 WCF 服务正在执行耗时繁重的工作。因此,为了应用程序性能,我创建了服务代理并选择了选项 "Generate asynchronous operations"。
现在在客户端,我得到了更多的方法"BeginMethodA","EndMethodA"。
现在我调用 "BegineMethodA" 并传递适当的参数。
在客户端,我有回调方法,它实际上返回 "MethodA" 的结果。我什至不打电话 "EndMethodA"。
"EndMethodA" 需要调用这个方法来完成操作吗?
是的,您确实需要致电 EndMethodA
。您在异步回调中执行此操作以获得实际结果(如果它具有 return 值)。
请注意,有两种方法可以简化此过程。
- 只需使用
Task
。您实际上可以跨 WCF 通道等待。
- 如果您已经有 Begin/End 方法,请使用
Task.Factory.FromAsync
和 await
that。
从客户端的角度来看,这两种方法都更加简洁,并且允许您忽略旧 Begin/End 模式中的 ugliness/confusion。
我使用的是c#语言。 具有方法 "MethodA" 的简单 WCF 服务正在执行耗时繁重的工作。因此,为了应用程序性能,我创建了服务代理并选择了选项 "Generate asynchronous operations"。 现在在客户端,我得到了更多的方法"BeginMethodA","EndMethodA"。 现在我调用 "BegineMethodA" 并传递适当的参数。 在客户端,我有回调方法,它实际上返回 "MethodA" 的结果。我什至不打电话 "EndMethodA"。 "EndMethodA" 需要调用这个方法来完成操作吗?
是的,您确实需要致电 EndMethodA
。您在异步回调中执行此操作以获得实际结果(如果它具有 return 值)。
请注意,有两种方法可以简化此过程。
- 只需使用
Task
。您实际上可以跨 WCF 通道等待。 - 如果您已经有 Begin/End 方法,请使用
Task.Factory.FromAsync
和await
that。
从客户端的角度来看,这两种方法都更加简洁,并且允许您忽略旧 Begin/End 模式中的 ugliness/confusion。