c# - 什么是 AsyncWCF` 中的 AsyncCallback 和 AsyncState?

标签 c# .net wcf

WCF 框架在以下操作(服务端)实现中对 AsyncState 和 AsyncCallback 做了什么?

IAsyncResult BeginWork(<<Service call params>>, AsyncCallback callback, object state);

我在努力理解

  1. 谁在填充这些?
  2. 他们的目的是什么?
  3. 关于 (2),使用这些的最佳实践是什么?

最佳答案

.NET 中有几个设计模式用于公开异步方法。

这种具有BeginXEndX 方法的模式称为异步编程模型

在此模式中,您始终可以传递这两个额外参数:

1) AsyncCallback 回调 是一个在操作完成时调用的委托(delegate)。

2) object state 是您想要与请求关联的任何对象。

调用者可以提供这两个参数,或将它们保留为 null,具体取决于用例。

参见 MSDN:Asynchronous Programming Model (APM)


附录:

在异步 WCF 服务实现的情况下,WCF 本身就是“客户端”并填充两个额外的参数。

工作流程如下:

1) 请求来自客户端。
2) WCF构造一个AsyncCallback和一个状态object
3) WCF调用你的BeginX方法并传递参数
4) 在您的方法中,您使用 WCF 的参数构造一个 IAsyncResult 对象
5) 您启动一些后台工作并返回您的 IAsyncResult 对象
6) WCF 等待它的 AsyncCallback 被调用
7) WCF 调用您的 EndX 方法并将响应返回给 Web 服务客户端。

客户端对此一无所知,可能会使用客户端同步或异步调用来调用此 Web 服务。

关于c# - 什么是 AsyncWCF` 中的 AsyncCallback 和 AsyncState?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15757790/

相关文章:

c# - 直接使用 LINQ 修改值?

c# - Entity Framework 中的实体是否可以继承未映射到表的实体?

c# - WCF 服务异常 :The formatter threw an exception while trying to deserialize the message

c# - 匿名方法作为 BeginInvoke 的参数?

c# - "Correct"从其他类设置控制值的方法

c# - 在 C# 属性上使用初始化语法

c# - 在 asp.net 中只能将一个 ScriptManager 实例添加到页面

c# - 为什么在这个非常简单的场景中我的 .net 析构函数没有被调用?

c# - 如何从 Services .NET 中过滤掉 WCF 异步方法

wcf - Azure WCF 服务使用 Azure WCF 服务