异步调用代理类
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中文网(m.sbmmt.com)!