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 和取消,但缺少并行数据结构。
评论