C# 異步調用代理類

m47c 9年前發布 | 4K 次閱讀 C#

異步調用代理類
AsyncInvokeProxy.cs

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace AsyncInvokeDemo  
{  
    public class AsyncInvokeProxy<T1>  
    {  
        private Action<T1> _task;  


        public AsyncInvokeProxy(Action<T1> task)  
        {  
            this._task = task;  
        }  


        public void BeginEnvoke<T2>(T1 args, Action<T2, Exception> cb, T2 cbArgs)  
        {  
            this._task.BeginInvoke(args, new AsyncCallback((r) =>  
            {  
                try  
                {  
                    cb(cbArgs, null);  
                    this._task.EndInvoke(r);  
                }  
                catch (Exception ex)  
                {  
                    cb(cbArgs, ex);  
                }  


            }), cbArgs);  
        }  
    }  
}  </pre> 


使用:

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AsyncInvokeDemo  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            Action<A> test = (a) =>  
            {  
                Console.WriteLine("start to invoke");  
                for (int i = 0; i < 1000; i++)  
                {  
                    Console.WriteLine(i);  
                }  


                Console.WriteLine("invoke args aint : {0},astr: {1} ", a.aInt, a.aStr);  
            };  


            AsyncInvokeProxy<A> proxy = new AsyncInvokeProxy<A>(test);  


            proxy.BeginEnvoke<B>(new A { aInt = 1, aStr = "astr" }, (b, ex) =>  
            {  
                if (ex != null)  
                {  


                }  


                Console.WriteLine("callback ret bint: {0},bstr: {1}", b.bInt, b.bStr);  


            }, new B { bInt = 2, bStr = "bstr" });  


            Console.ReadLine();  
        }  
    }  


}  </pre> 


 本文由用戶 m47c 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!