C# 异步调用代理类

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

异步调用代理类
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);  
            }  
        }  
    }  

使用:
    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();  
            }  
        }  
      
      
    }