BLToolkit-Aspect-AsyncAspect (一)
异步调用
这一 aspect 简化了异步操作.注意AsyncAspect 不与其他属性兼容 ,如果你应用他们到 AsyncAspect 的一个抽象方面上.它将会无效.
代码示例.
1. 引用命名空间
using System.Threading; using BLToolkit.Aspects; using BLToolkit.Reflection;
2. 新建抽象类AsyncTestObject
1 public abstract class AsyncTestObject 2 { 3 /// <summary> 4 /// 我们将会异步调用这个方法 5 /// </summary> 6 /// <param name="intVal"></param> 7 /// <param name="strVAl"></param> 8 /// <returns></returns> 9 public int Test(int intVal, string strVAl) 10 { 11 Thread.Sleep(200); 12 return intVal; 13 } 14 15 16 // 开始异步方法应该和需要调用的方法具有相同的参数.并返回IAsyncResult 17 // 可以提供两个额外的参数 AsyncCallback and state object 18 // ‘Begin’前缀是约定的一部分 19 [Async] 20 public abstract IAsyncResult BeginTest(int intVal,string strVal); 21 22 [Async] 23 public abstract IAsyncResult BeginTest(int intVal, string strVal, AsyncCallback callback); 24 25 [Async] 26 public abstract IAsyncResult BeginTest(int intVal, string strVal, AsyncCallback callback, object state); 27 28 //结束异步方法应该使用 IAsyncResult作为传入参数 并且返回值应该和需要调用的方法一致 29 //‘End’前缀是约定的一部分 30 [Async] 31 public abstract int EndTest(IAsyncResult asyncResult); 32 33 //Begin/End前缀并不是必须的. 你可以使用任何名字 34 //如果你提供一个目标方法的名字作为一个参数传入Async属性。 35 [Async("Test")] 36 public abstract IAsyncResult AnyName(int intVal, string strVal, AsyncCallback callback, object state); 37 38 // 在这里我们提供参数列表和方法名称 39 [Async("Test",typeof(int),typeof(string))] 40 public abstract int AnyName(IAsyncResult asyncResult); 41 }
3. 测试
static void Main(string[] args) { //测试一 //AsyncTestObject o = TypeAccessor<AsyncTestObject>.CreateInstance(); //IAsyncResult ar = o.BeginTest(1, "10"); //Console.WriteLine(o.EndTest(ar)); //测试二 //AsyncTestObject o = TypeAccessor<AsyncTestObject>.CreateInstance(); //IAsyncResult ar = o.BeginTest(2, null,CallBack,o); AsyncTestObject o = TypeAccessor<AsyncTestObject>.CreateInstance(); var asyncResult = o.AnyName(1, null, null, null); Console.WriteLine(o.AnyName(asyncResult)); Console.ReadKey(); } /// <summary> /// 回调函数 /// </summary> /// <param name="ar"></param> private static void CallBack(IAsyncResult ar) { Console.WriteLine("Callback"); AsyncTestObject o = (AsyncTestObject)ar.AsyncState; o.EndTest(ar); }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。