J'essaie de combiner ma déclaration de PLINQ comme ceci:La combinaison PLINQ avec la méthode Async
Enumerable.Range(0, _sortedList.Count()).AsParallel().WithDegreeOfParallelism(10)
.Select(i => GetTransactionDetails(_sortedList[i].TransactionID))
.ToList();
Avec une méthode async comme ceci:
private async void GetTransactionDetails(string _trID)
{
await Task.Run(() =>
{
});
}
Alors que je peux simplement ajouter un opérateur await ici:
Enumerable.Range(0, _sortedList.Count()).AsParallel().WithDegreeOfParallelism(10)
.Select(i => await GetTransactionDetails(_sortedList[i].TransactionID))
.ToList();
Comment puis-je y parvenir?
P.S. De cette façon, je pouvais faire 5-10 requêtes HTTP simultanément tout en veillant à ce que l'utilisateur final ne se sent pas de gel « écran » en le faisant ...
Pourquoi essayez-vous de paralléliser le * démarrage * d'une opération asynchrone, étant donné que le démarrage va prendre à peu près zéro temps du tout. PLINQ est destiné aux opérations liées à l'UC exécutées depuis longtemps; ce n'est pas ce que tu as. De plus, il semble que 'GetTransactionDetails' utilise l'anti-pattern async over sync. Il ne devrait pas décharger le travail sur un autre thread, il devrait plutôt être une méthode synchrone. Si l'appelant veut l'appeler avec Task.Run, ils peuvent, s'ils veulent faire autre chose, comme utiliser PLINQ, alors ils peuvent le faire. – Servy
@Servy pourriez-vous montrer comment je pourrais mettre en œuvre ce que vous venez de dire sur un exemple plus pratique? – User987
Supprimez 'Task.Run' de' GetTransactionDetails', et faites-le faire de façon synchrone, permettant ainsi à PLINQ de le paralléliser. – Servy