一、并行基础
许多个人计算机和工作站都有两个或四个内核(即 CPU),使多个线程能够同时执行。 在不久的将来,计算机预期会有更多的内核。 为了利用当今和未来的硬件,您可以对代码进行并行化,以将工作分摊在多个处理器上。 过去,并行化需要线程和锁的低级操作。 Visual Studio 2010 和 .NET Framework 4 提供了新的运行时、新的类库类型以及新的诊断工具,从而增强了对并行编程的支持。 这些功能简化了并行开发,使您能够通过固有方法编写高效、细化且可伸缩的并行代码,而不必直接处理线程或线程池。 下图从较高层面上概述了 .NET Framework 4 中的并行编程体系结构。

二、异步编程设计模式
使用多种方式可向客户端代码公开异步功能。
基于事件的异步模式为类规定了一种用于呈现异步行为的建议方式。
IAsyncResult 接口
表示异步操作的状态
'声明 <ComVisibleAttribute(
True)> _
Public
Interface IAsyncResult
'用法
Dim instance
As IAsyncResult
1)IAsyncResult 接口由包含可异步操作的方法的类实现。它是启动异步操作的方法的返回类型,如 FileStream.BeginRead,也是结束异步操作的方法的第三个参数的类型,如 FileStream.EndRead。当异步操作完成时,IAsyncResult 对象也将传递给由 AsyncCallback 委托调用的方法。
2).NET Framework 允许您异步调用任何方法。为此,应定义与您要调用的方法具有相同签名的委托;公共语言运行库会自动使用适当的签名为该委托定义 BeginInvoke 和 EndInvoke 方法。
BeginInvoke 方法可启动异步调用。它与您需要异步执行的方法具有相同的参数,另外它还有两个可选参数。第一个参数是一个 AsyncCallback 委托,该委托引用在异步调用完成时要调用的方法。第二个参数是一个用户定义的对象,该对象可向回调方法传递信息。BeginInvoke 立即返回,不等待异步调用完成。BeginInvoke 会返回 IAsyncResult,这个结果可用于监视异步调用进度。
EndInvoke 方法检索异步调用的结果。调用 BeginInvoke 后可随时调用 EndInvoke 方法;如果异步调用尚未完成,EndInvoke 将一直阻止调用线程,直到异步调用完成后才允许调用线程执行。EndInvoke 的参数包括您需要异步执行的方法的 out 和 ref 参数(在 Visual Basic 中为 <Out> ByRef 和 ByRef)以及由 BeginInvoke 返回的 IAsyncResult。
3) IAsyncResult 类型公开的成员
AsyncState 获取用户定义的对象,它限定或包含关于异步操作的信息。
AsyncWaitHandle 获取用于等待异步操作完成的 WaitHandle。
CompletedSynchronously 获取异步操作是否同步完成的指示。
IsCompleted 获取异步操作是否已完成的指示。
AsyncWaitHandle 获取用于等待异步操作完成的 WaitHandle。
CompletedSynchronously 获取异步操作是否同步完成的指示。
IsCompleted 获取异步操作是否已完成的指示。