Silverlight 的任务并行库

阅读数:1265 2011 年 8 月 29 日

话题:.NET语言 & 开发

Silverlight 的异步服务模型迫使开发者从一开始就处理多线程。因此微软选择去掉任务并行库就显得有点奇怪了,毕竟它是.NET 多线程基础设施的核心。幸运的是,我们还有其他选择。

如果LGPL 2.0 许可证不会为你带来麻烦,你可以使用 Mono 实现的移植。Robert McLaws 和 Jrmie“Garuma”Laval 已经完成了移植,并把他们的成果发布到 NuGet,标题是Task Parallel Library for Silverlight - 2.0。不幸的是,他们还没发布 LGPL 许可证的副本、源代码或者 Mono 版权信息的通告。虽然这是可以修正的,但它可能在此时造成一些法律问题。

假设他们将会修正这个疏忽(译注:目前已经修正),你就可以从他们的包里得到下面这些特性:

  • 适用于 Silverlight 3 和 4 的实现
  • 适用于 Silverlight for Windows Phone 7 和 7.1 的实现
  • 任务并行库本身(System.Threading.Tasks)
  • 并行数据结构(System.Collections.Concurrent)
  • 取消基础设施(如 CancellationToken)
  • 并行 for 循环,但不支持并行 LINQ 表达式

另一个选择是 David Catuhe 的PortableTPL。这不是真正的 TPL,不过非常简单,原本是为教学而设计的。当然,它确实能够在 Silverlight、Windows Phone 7 和 XBox 360 上运行,并且非常大方地采用了Microsoft Public License许可证。它拥有核心 TPL 特性,比如 Task 和取消,但缺少并行数据结构。

查看英文原文:Task Parallel Library for Silverlight