我有一個異步方法,它應該查找數據庫條目。它按名稱進行過濾,因此是並行執行的候選者。如何等待LINQ的ParallelQuery?
但是,我找不到一個簡單的方法來支持並行執行和異步任務。
這是我有:
private async Task<List<Item>> GetMatchingItems(string name) {
using (var entities = new Entities()) {
var items = from item in entities.Item.AsParallel()
where item.Name.Contains(name)
select item;
return await items.ToListAsync(); //complains "ParallelQuery<Item> does not contain a definition for ToListAsync..."
}
}
當我刪除AsParallel()
它會編譯。我不應該同時使用這兩個功能?或者我理解錯了什麼?
IHMO,都有道理:
AsParallel()
,就表示這個數據庫查詢可以得到分成,同時運行幾個子查詢,因爲任何一項的個別匹配不依賴於任何其他項目。 更新:在這個例子中的壞主意,請參閱評論和答案!ToListAsync()
將支持此方法的異步執行,以允許其他匹配方法(在其他數據上)立即開始執行。
如何同時使用並行exectuion(與LINQ)和異步任務?
爲什麼你想在數據庫查詢中使用'.AsParallel()'?你認爲它速度更快嗎?它會崩潰得更快,如果這是你想要的...請去閱讀斯蒂芬克萊裏的博客... – Aron
我想你的意思是這一個:http://blog.stephencleary。com/2014/04/a-tour-of-task-part-0-overview.html – Marcel
問題是您試圖讓EF使用平行度優化您的查詢。這是SQL服務器查詢計劃生成器的工作。在這種情況下將查詢拆分實際上具有負面影響。 – Aron