首页 > 代码库 > 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 (一)