1
是否有東西可以在後臺運行Linq查詢 - 也許基於PLINQ?我嘗試了一些東西,但沒有找到合適的方法。Linq在後臺查詢 - PLINQ中的東西
我知道我可以創建一個後臺工作這樣做,但我尋找的東西:「我可以只使用」不要求寫全處理我自己的。
整體畫面:我儘量保持我的WinForm應用程序反應詭計讀取數據(通過LINQ),避免「堵」讀書大數據量時。
是否有東西可以在後臺運行Linq查詢 - 也許基於PLINQ?我嘗試了一些東西,但沒有找到合適的方法。Linq在後臺查詢 - PLINQ中的東西
我知道我可以創建一個後臺工作這樣做,但我尋找的東西:「我可以只使用」不要求寫全處理我自己的。
整體畫面:我儘量保持我的WinForm應用程序反應詭計讀取數據(通過LINQ),避免「堵」讀書大數據量時。
你可能會產生一個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());
不錯的例子,也與所有細節。特別是TaskScheduler.FromCurrentSynchronizationContext()值得注意,因爲它繼續使用原始線程,因此在更新UI時避免了跨線程異常(因此不需要InvokeRequired處理)。 – 2011-03-05 12:19:09