.NET并行扩展之模式与范例

虽然从2007年开始微软致力于.NET的并行扩展,但针对.NET 4.0的多项功能仍未充分实现。有些内部框架的功能“过于专属”,而其它功能则有利于测试与用户反馈。 Stephen Toub提到:

所幸的是大部分案例中,我们能够基于.NET 4提供的并行架构与.NET 4类型和方法来实现这项功能,并在其它案例中使用.NET 4提供的扩展功能,让开发人员能清晰地实现独立的自定义功能。久而久之,我们收集了大量的案例,我们选择把ParallelExtensionsExtras 作为.NET 4范例的一部分进行公布,大家可从http://code.msdn.microsoft.com/ParExtSamples下载。

代码范例涵盖了多种不同的功能。以下列出大家关心的部分功能:

IProducerConsumerCollection实现了BlockingCollection封装。该接口是用于传统厂商与客户解决方案的线程安全集合。它并不包含在.NET 4.0当中,因为不同应用程序对BlockingCollection有不同的需求。

对于处理COM组件所需的单线程单元,微软提供了StaTaskScheduler。StaTaskScheduler的入门版本简单易用,它启用若干预定义的STA线程并等待处理任务。微软推荐用户使用本地线程存储来给每个工作线程实例化COM对象。

对于Rx Framework感兴趣的开发人员,可以参考Task.ToObservable扩展方法。它可订阅Task的结果。如果该订阅在任务完成之前就被丢失,那么该任务也会被取消。

一个相对复杂的解决方案就是ReductionVariable。它包含一些值,与实例或线程一一对应,在归约操作中使用。基于本地线程的存储,减少了它在工作线程间同步的比例。归约操作一旦完成,就可以对这些值进行枚举来生成最终结果。

查看英文原文:Patterns and Samples for .NET Parallel Extensions
 

你可能感兴趣的:(.NET并行扩展之模式与范例)