多线程、并行与异步编程全解析
1. 调用线程的同步问题
在分析当前 Main() 方法的实现时,我们会发现调用 BeginInvoke() 和 EndInvoke() 之间的时间跨度明显小于五秒。当 Doing more work in Main() 打印到控制台后,调用线程会被阻塞,直到辅助线程完成工作,才能获取 Add() 方法的结果,这实际上又变成了同步调用。下面是示例代码:
static void Main(string[] args)
{
...
BinaryOp b = new BinaryOp(Add);
// 处理下一条语句后,调用线程会被阻塞,直到 BeginInvoke() 完成
IAsyncResult iftAR = b.BeginInvoke(10, 10, null, null);
// 此调用耗时远小于五秒
Console.WriteLine("Doing more work in Main()!");
// 现在又要等待另一个线程完成
int answer = b.EndInvoke(iftAR);
...
}
为了让调用线程能判断异步调用的方法是否完成工作, IAsyncResult 接口提供了 IsCompleted 属性。通过该属性,调用线程在调用 EndInvoke()
超级会员免费看
订阅专栏 解锁全文
10万+

被折叠的 条评论
为什么被折叠?



