首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步WCF`中的AsyncCallback和AsyncState是什么?

异步WCF`中的AsyncCallback和AsyncState是什么?
EN

Stack Overflow用户
提问于 2013-04-02 06:44:40
回答 2查看 5.9K关注 0票数 3

在下面的操作(服务端)实现中,WCF框架如何处理AsyncState和AsyncCallback?

代码语言:javascript
复制
IAsyncResult BeginWork(<<Service call params>>, AsyncCallback callback, object state);

我在试着理解

  1. 是谁在装这些东西?
  2. 他们的目的是什么?
  3. 与(2)有关的是,在使用这些方面的最佳实践是什么?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-02 07:43:12

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

这种使用BeginXEndX方法的模式称为Asynchronous Programming Model

在这种模式中,您总是可以传递这两个额外的参数:

1) AsyncCallback callback是在操作完成时调用的委托。

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服务。

票数 5
EN

Stack Overflow用户

发布于 2013-04-02 14:41:14

如果您使用WCF开发异步调用,请阅读这篇非常有用的文章,这是我用良好的示例代码阅读的关于这个主题的最好文章。

http://www.danrigsby.com/blog/index.php/2008/03/26/async-operations-in-wcf-iasyncresult-model-server-side/

编辑:

客户端:

代码语言:javascript
复制
Service.BeginInitialize(data, new AsyncCallback(OnEndInitialize), null);  

客户端包含方法:

代码语言:javascript
复制
void OnEndInitialize(IAsyncResult asyncResult)
     {

服务将接收"data“对象,执行它需要的任何操作,然后调用客户端的OnEndInitialize方法。

关于您询问的对象状态,当使用APM模式执行异步操作时,服务有2个操作,开始和结束,当他启动时,是使用BeginOperation,当BeginOperation完成时-然后客户机接收到一个IAsyncResult对象,该对象可以包含对象状态。这是用于进度指示的,我将把对象视为乒乓球对象.当服务完成它在服务端调用EndOperation的操作时,这将在客户端调用回调,然后客户端可以再次检查IAsyncResult中的状态对象。

这就是BeginOperation和EndOperation包含IAsyncResult param/IAsyncResult的原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15757790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档