BLToolkit 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);
        }
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值