zoukankan      html  css  js  c++  java
  • Net异步委托-泛型委托Action<T>与Func<T,TResult>及 异步调用AsyncCallback

    1.相同点

    Func<ReqMode,ResultModel> 与 Action<ReqMode> 

      1).都是Net3.5 之后内置的委托方法,作用几乎一致

      2).都支持lambad 表达式方式调用

    2.不同:

       Func<ReqMode,ResultModel> 有返回值

       Action<ReqMode>  无返回值

    3. BeginInvoke与EndInvoke

      1). BeginInvoke方法触发你的异步方法,它和你想要执行的异步方法有相同的参数。另外还有两个可选参数,第一个是AsyncCallback委托是异步完成的回调方法。第二个是用户自定义对象,该对 象将传递到回调方法中。BeginInvoke立即返回并且不等待完成异步的调用(继续执行该下面的代码,不需要等待)。BeginInvoke返回IAsyncResult接口,可用于检测异步调用的过程。

      2). 通过EndInvoke方法检测异步调用的结果。如果异步调用尚未完成,EndInvoke将阻塞调用线程,直到它完成。EndInvoke参数包括out和ref参数。

      3).BeginInvoke和EndInvoke进行异步调用的四种常见方式。在调用BeginInvoke可以做以下工作:

    1. 做一些其他操作,然后调用EndInvoke方法阻塞线程直到该方法完成。
    2. 使用IAsyncResult.AsyncWaitHandle属性,使用它的WaitOne方法阻塞线程直到收到WaitHandle信号,然后调用EndInvoke。
    3. 检查BeginInvoke返回值IAsyncResult的状态来决定方法是否完成,然后调用EndInvoke方法。
    4. 通过在BeginInvoke方法中传递该委托,在回调方法中调用该委托的EenInvoke方法。

    注意

    无论你怎么使用,都必须调用EndInvoke方法结束你的异步调用。

    示例:

    Action<T>:

    Action<BillGenRecordReqModel> PushSaveBillGenRecord = ( req) =>
    {
     PushSaveBillGenRecord_Post(req); //自定义的方法
    };
    AsyncCallback PushSaveBillGenRecordFun = (result) => {
     ((Action<BillGenRecordReqModel>)result.AsyncState).EndInvoke(result); };
    

      

    Func<T,TResult>:Func<BillGenRecordReqModel,JsonDataModel> PushSaveBillGenRecord = (req) =>var res= PushSaveBillGenRecord_Post(req);

    return res;
    };
    AsyncCallback PushSaveBillGenRecordFun = (result) => {
    var res = ((Func<BillGenRecordReqModel, JsonDataModel>)result.AsyncState).EndInvoke(result);//自定义的方法
    //日志

    Core.BizTool.LogPlat.LogHelper.Info("PushSaveBillGenRecord", "PushSaveBillGenRecordFun", "", $"{reqModel.WorkNo}", $"异步回调返回结果为:{res}"); };

      

    努力不给自己一点懒惰的理由,否则你会一蹶不振
  • 相关阅读:
    298. Binary Tree Longest Consecutive Sequence
    128. Longest Consecutive Sequence
    59. Spiral Matrix II
    54. Spiral Matrix
    186. Reverse Words in a String II
    151. Reverse Words in a String
    61. Rotate List
    Beyond Compare脚本:命令行批量比较文件并生成html格式的差异报告
    Moving XML/BI Publisher Components Between Instances
    VSTO学习笔记
  • 原文地址:https://www.cnblogs.com/chao0219/p/15419773.html
Copyright © 2011-2022 走看看