首页 > 代码库 > BLToolkit-Aspect-AsyncAspect (一)
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 // 开始异步方法应该和需要调用的方法具有相同的参数.并返回IAsyncResult17 // 可以提供两个额外的参数 AsyncCallback and state object18 // ‘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); }
BLToolkit-Aspect-AsyncAspect (一)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。