| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
m47c
10年前发布

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);                }            }        }  

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