苏飞论坛

标题: 关于异步传参和返回值 [打印本页]

作者: pdang9980    时间: 2023-5-8 17:14
标题: 关于异步传参和返回值
我这里用了10个线程调用了异步,我怎样才能知道是哪个线程返回了哪个结果?懂的求告知,谢谢!

作者: pdang9980    时间: 2023-5-10 18:17
自己解决了

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
厉害厉害




欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4