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

来源:这里教程网 时间:2026-02-21 13:28:29 作者:

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

相关推荐