首页  >  文章  >  后端开发  >  C# 异步调用代理类的示例代码详情

C# 异步调用代理类的示例代码详情

黄舟
黄舟原创
2017-03-03 11:26:101518浏览

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


}

 以上就是C#  异步调用代理类的示例代码详情的内容,更多相关内容请关注PHP中文网(www.php.cn)!


声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn