非同步呼叫代理類
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# 非同步呼叫代理類的範例程式碼詳情的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!