2011-03-04 47 views
1

是否有東西可以在後臺運行Linq查詢 - 也許基於PLINQ?我嘗試了一些東西,但沒有找到合適的方法。Linq在後臺查詢 - PLINQ中的東西

我知道我可以創建一個後臺工作這樣做,但我尋找的東西:「我可以只使用」不要求寫全處理我自己的。

整體畫面:我儘量保持我的WinForm應用程序反應詭計讀取數據(通過LINQ),避免「堵」讀書大數據量時。

回答

3

你可能會產生一個Task<T>,並讓它包裝你的PLINQ查詢。

PLINQ不是關於創建異步操作(你想要的),但單一的(阻塞)操作中,而並行處理。相反,你可能想要做類似的事情:

Task<IEnumerable<YourType>> task = Task.Factory.StartNew( 
     () => 
     { 
      // Use standard LINQ here... 
      return myCollection.Where(SomeCriteria); 
     } 
    ); 

// When this is completed, do something with the results 
task.ContinueWith(t => 
{ 
    IEnumerable<YourType> results = t.Result; 

    // Use results here (on UI thread - no invoke required) 

}, TaskScheduler.FromCurrentSynchronizationContext()); 
+0

不錯的例子,也與所有細節。特別是TaskScheduler.FromCurrentSynchronizationContext()值得注意,因爲它繼續使用原始線程,因此在更新UI時避免了跨線程異常(因此不需要InvokeRequired處理)。 – 2011-03-05 12:19:09