.net 中的异步处理温习

来源:互联网 发布:网络用语ppt 编辑:程序博客网 时间:2024/05/17 12:03

这几天,看WF本质论,里面提到了.net的异步处理。由于里面使用的是代码片段,所以有点看不懂。于是下定决心,温习一下.net中的异步处理。

使用C#在.net开发已经有5年了,最初使用.net中的异步处理大约是在4年前。当时,只是为了实现要求的功能,没有详细研究。这也难怪看WF时会头晕(基础不牢的后果呀)。

首先,我们分析一下异步处理的环境

  1.  需要在当前线程中获取返回值
  2. 不需要在当前线程中获取返回值,但是仍然需要对返回值做处理

对于第1中情况,还可以继续细分

  1. 在当前线程中启动线程T,然后继续执行当前线程中的其它任务,最后在当前线程中获取T的返回值
  2. 在当前线程中启动线程T,然后继续执行当前线程中的其它任务R1,等待T执行完成,当T执行完成后,继续执行当前线程中的其它任务R2,最后获取T的返回值
  3. 在当前线程中启动线程T,只要T在执行就执行任务R,最后获取T的返回值

下面,我将一一给出例子:

在当前线程中启动线程T,然后继续执行当前线程中的其它任务,最后在当前线程中获取T的返回值

 

输出结果如下:

 

Implement other tasks

Func start to run

...

Func end to run

Implement other tasks end ...

Get user's input

56

 

在当前线程中启动线程T,然后继续执行当前线程中的其它任务R1,等待T执行完成,当T执行完成后,继续执行当前线程中的其它任务R2,最后获取T的返回值

 

输出结果如下:

 

Input number please...

25

Implement task 1

Func start to run

...

Func end to run

Implment task 2

Get user's input

25

 

 

在当前线程中启动线程T,只要T在执行就执行任务R,最后获取T的返回值

 

输出结果如下:

 

Func start to run

...

>>>>>Func end to run

>

Implement other task2

Get user's input

23

 

不需要在当前线程中获取返回值,但是仍然需要对返回值做处理

 

输出结果如下:

 

Input number please...

23

Main thread ends

Func start to run

...

Func end to run

call back starts

Message from Main thread.

The input number is : 23

call back ends