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 使用EndInvoke方法的图示