隨著.NET 4的發布,要在.NET平台之上進行並行編程可謂是易如反掌。實際上,微軟為大家提供了三種並行編程的基礎功能。第一種是提供給C++使用的並發運行時 (Concurrency Runtime);第二種是藉由.NET平台提供給托管語言的一組並行編程函數庫(包括TPL、PLINQ和並行編程數據結構等);最後一種就是基於F# 本身的並行編程特性。
然而,由於考慮精簡的緣故,當前的CoreCLR並未包含.NET 4中的並行函數庫,從而在Silverlight(即使最新的Silverlight 4)中也無法直接獲得並行編程的能力。但是,大家不用氣餒,我們還可以在Silverlight中利用F#來實現並行編程。
Bart Czernicki在其博文《Silverlight 3 and F# Support in Visual Studio 2010》中詳細講述了這種方式。在這篇博文中,Bart給出利用F#進行並行編程的具體步驟,相應的示例代碼,以及對性能的討論;還表達了一個非常有意思的觀點:
並發編程是Silverlight超越其他RIA技術的最大特性。
Bart也提到,使用F#來在Silverlight中輔助進行並行編程的好處:
不用顯式地啟動、停止線程(比如調用Thread.Start)
不需使用BackgroundWorker
不需使用回調(AsyncCallBack)
無需遵循BeginExecute這樣的異步模式
當然,通過F#來在Silverlight中實現並行編程,還是有諸多的不足:
不能利用PLINQ
如果你的代碼主要由C#、VB寫成,那麼只能用F#編寫一個包裝器,來變相地實現並行
目前這種方式只能在Silverlight 3上使用,這是由於F# runtime for Silverlight只發布了Silverlight 3的版本,而Silverlight 4版本的F#運行時要在Silverlight 4 Tools for VS2010正式發布的時候才會提供。
對於上面的最後一點,Gaston Hillar的博文《Silverlight 4 RC Stays With the Old .NET Threads; F# Helps》也有所提及。
無論如何,雖然我們現在可以變通地在Silverlight中進行並行編程,但還是希望微軟能在未來的Silverlight版本中提供直接的並行編程功能