我想我PLINQ聲明這樣的組合:與異步方法結合PLINQ
Enumerable.Range(0, _sortedList.Count()).AsParallel().WithDegreeOfParallelism(10)
.Select(i => GetTransactionDetails(_sortedList[i].TransactionID))
.ToList();
採用異步方法是這樣的:
private async void GetTransactionDetails(string _trID)
{
await Task.Run(() =>
{
});
}
所以,我可以簡單地添加一個的await操作在這裏:
Enumerable.Range(0, _sortedList.Count()).AsParallel().WithDegreeOfParallelism(10)
.Select(i => await GetTransactionDetails(_sortedList[i].TransactionID))
.ToList();
我該如何做到這一點?
P.S.通過這種方式,我可以同時發出5-10個HTTP請求,同時確保最終用戶在這樣做時不會感覺到任何「屏幕」凍結...
爲什麼你想並行化異步操作的*開始*,因爲開始它基本上不需要任何時間。 PLINQ用於長時間運行CPU綁定操作;這不是你所擁有的。另外,它看起來像'GetTransactionDetails'正在使用異步同步反模式。它不應該將工作轉移到另一個線程,而應該是一個同步方法。如果調用者想用'Task.Run'調用它,他們可以,如果他們想要做別的事情,比如使用PLINQ,那麼他們可以做到這一點。 – Servy
@Servy你能告訴我怎麼才能實現你剛剛在一個更實際的例子中所說的話嗎? – User987
從'GetTransactionDetails'中刪除'Task.Run',並讓它同步完成工作,從而允許PLINQ對其進行並行化。 – Servy