http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 11414|回复: 2

[求助] 关于异步传参和返回值

[复制链接]
发表于 2023-5-8 17:14:52 | 显示全部楼层 |阅读模式
我这里用了10个线程调用了异步,我怎样才能知道是哪个线程返回了哪个结果?懂的求告知,谢谢!


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2023-5-10 18:17:38 | 显示全部楼层
自己解决了

1、HttpResult 类里加

/// <summary>
/// 返回AsyncState自定义状态
/// </summary>
public string AsyncState { get; set; }


2、下面方法里传入自定义参数 b
/// <summary>
/// GetHtml方法的异步调用方式,根据相传入的数据,得到相应页面数据
/// </summary>
/// <param name="item">参数类对象</param>
/// <param name="resultMainName">回调的方法名</param>
/// <param name="b">自定义参数</param>
public void BeginInvokeGetHtml(HttpItem item, ResultHandler resultMainName,string b) {
    resultheadler = resultMainName;
    GethtmlHandler handler = new GethtmlHandler(GetHtml);
    handler.BeginInvoke(item, new AsyncCallback(CallbackFunc), b);
}

3、内部回调方法加
/// <summary>
/// 内部回调方法
/// </summary>
/// <param name="resultType">返回值</param>
private void CallbackFunc(IAsyncResult resultType) {
    //result 是“加法类.Add()方法”的返回值            
    //AsyncResult 是IAsyncResult接口的一个实现类,引用空间:System.Runtime.Remoting.Messaging            
    //AsyncDelegate 属性可以强制转换为用户定义的委托的实际类。
    GethtmlHandler handler = (GethtmlHandler)((AsyncResult)resultType).AsyncDelegate;
    HttpResult result = handler.EndInvoke(resultType);
    //用户传入的自定义参数 随result返回
    result.AsyncState = (string)resultType.AsyncState;
    //回调方法传回执行结果
    resultheadler.Invoke(result);
}

4、接收返回 var asyncState =  result.AsyncState;

发表于 2023-5-11 14:28:14 | 显示全部楼层
厉害厉害
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-22 07:07

© 2014-2021

快速回复 返回顶部 返回列表