.Net的异步机制

 

下面我们来看看异步的执行顺序,并回顾下 IAsyncResult 下各个属性的应用,如果还是不熟悉请看前2篇文章.

Code 1:

1  class Program
2  {
3    static void Main(string[] args)
4    {
5      Console.WriteLine("[(#{1}){0}]:Asynchronous Start", DateTime.Now.ToString(), Thread.CurrentThread.ManagedThreadId);
6
7      AsyncTest test = new AsyncTest();
8      MyThirdAsyncCode.AsyncTest.SalaryEventHandler del = test.YearlySalary;
9      //使用回调函数
10      AsyncCallback callback = new AsyncCallback(OnSalaryCallback);
11      IAsyncResult ar = del.BeginInvoke(100000, 15, 100000, callback, 2000);
12
13      DoAntherJob();
14      Console.ReadLine(); // 让黑屏等待,不会直接关闭..15    }
16
17    //开始其他工作.18    static void DoAntherJob()
19    {
20      Thread.Sleep(1000);//需要1秒才能完成这个工作,注1
21      Console.WriteLine("[(#{1}){0}]:Do Another Job", DateTime.Now.ToString(), Thread.CurrentThread.ManagedThreadId);
22    }
23
24    static void OnSalaryCallback(IAsyncResult asyncResult)
25    {
26      //通过AsyncState 获取额外的参数.27      decimal para = (int)asyncResult.AsyncState;
28
29      //通过AsyncDelegate 获取原始的委托对象
30      AsyncResult obj = (AsyncResult)asyncResult;
31      MyThirdAsyncCode.AsyncTest.SalaryEventHandler del =
(MyThirdAsyncCode.AsyncTest.SalaryEventHandler)obj.AsyncDelegate;
32
33      if (asyncResult.IsCompleted)// 判读是否已经调用完成
34        Console.WriteLine("[(#{1}){0}]:Asynchronous Finished.", DateTime.Now.ToString(), Thread.CurrentThread.ManagedThreadId);
35
36      decimal val = del.EndInvoke(asyncResult);
37
38      Console.WriteLine("[(#{2}){0}]:Output Result:{1}", DateTime.Now.ToString(), val + para, Thread.CurrentThread.ManagedThreadId);
39    }
40  }
41
42  public class AsyncTest
43  {
44    public delegate decimal SalaryEventHandler(decimal salary, int monthCount, decimal bonus); // 对应YearlySalary方法
45    public decimal YearlySalary(decimal salary, int monthCount, decimal bonus)
46    {
47      //模拟耗时/复杂的逻辑计算.48      Thread.Sleep(3000);//等待3秒,注2
49      return salary * monthCount + bonus;
50    }
51  }

图1


本文来自编程入门网:http://www.bianceng.cn/Programming/net/201112/32184_2.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值