C# 异步调用代理类

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
异步调用代理类
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();  
            }  
        }  
      
      
    }  

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇: iOS 时间类常用方法

下一篇:Android尺寸单位转换 工具类