25.4 异步编程的4种方法

实现异步编程有4种方法可供选择,这4种方法实际上也对应着4种异步调用的模式,分为“等待”和“回调”两大类。

25.4.1 使用EndInvoke

当使用BeginInvoke异步调用方法时,如果方法未执行完,EndInvoke方法就会一直阻塞,直到被调用的方法执行完毕,如代码清单25-4所示:

代码清单25-4 使用EndInvoke


using System;

using System.Threading;

namespace ProgrammingCSharp4

{

class AsynchronousSample

{

//声明一个委托类型

public delegate void PrintDelegate(string content);

public static void Main()

{

int threadId=Thread.CurrentThread.ManagedThreadId;

PrintDelegate printDelegate=AsynchronousSample.Print;

Console.WriteLine(“[主线程id:{0}]\t开始调用打印方法……”,threadId);

IAsyncResult result=printDelegate.BeginInvoke("Hello World!",null,null);

printDelegate.EndInvoke(result);

}

public static void Print(string content)

{

int threadId=Thread.CurrentThread.ManagedThreadId;

Console.WriteLine(“[当前线程id:{0}]\t{1}”,threadId,content);

System.Threading.Thread.Sleep(2000);

Console.WriteLine(“[当前线程id:{0}]\t打印方法调用完毕.”,threadId);

}

}

}


上述代码的运行结果如下:


[主线程id:1]开始调用打印方法……

[当前线程id:3]Hello World!

[当前线程id:3]打印方法调用完毕.

请按任意键继续……


图25-4演示了这一过程。

25.4 异步编程的4种方法 - 图1

图 25-4 使用EndInvoke方法的图示