Я пытаюсь совместить мое 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 для длительных операций с привязкой к процессору; это не то, что у вас есть. Кроме того, похоже, что 'GetTransactionDetails' использует асинхронный анти-шаблон. Он не должен разгружать работу в другой поток, а просто должен быть синхронным методом. Если вызывающий абонент хочет называть его «Task.Run», они могут, если они хотят сделать что-то еще, например, использовать PLINQ, тогда они могут это сделать. – Servy
@Servy вы могли бы показать мне, как я могу реализовать то, что вы только что сказали, на более практическом примере? – User987
Удалите 'Task.Run' из' GetTransactionDetails' и просто выполняйте эту операцию синхронно, тем самым позволяя PLINQ распараллелить его. – Servy