Я знаю, что это плохо для производительности моего приложения, чтобы создать слишком много потоков (threadstarvation), но я не уверен, как это переводится в функциональные возможности Async/Await. Я понимаю, что Task.Run() использует ThreadPool для выполнения своего кода. Также я прочитал, что он не создает новый поток.Является ли это разумным, чтобы перерисовать CPU через Task.Run
Теперь у меня есть 3 очка, я coudln't найти ответ на:
мне нужно, чтобы убедиться, что не многие нитей вокруг вручную или будет, что будет управляться .Net Do -Фреймворк?
Может ли этот код привести к резьбовому соединению?
Dim ltsk As List(Of Task) For Each pers As Person In ListPerson 'Potentialy big Collection of Objects ltsk.Add(Task.Run(Sub() pers.CheckPerson)) 'Long running function with own Task.Run() inside Next Task.WhenAll(ltsk)
Создает ли это нить или нет?
Dim i As Integer = 0 Task.Run(Sub() i += 1) 'I know its an insane example
Я использую код похож на то, что я спрашиваю (2.) в моем новом приложении и получить загрузку процессора более чем на 90%. Обычно, когда я получаю это высоко, я сделал что-то неправильно.
Благодарим вас за это разъяснение. В чем же преимущество использования 'Parallel' вместо того, чтобы самостоятельно обрабатывать« Задачу »? – Patrick
'Parallel' (и Parallel LINQ) имеют много конструкций более высокого уровня для таких вещей, как« выполнить эту операцию на этой последовательности входов »,« суммировать результаты »и т. Д. С помощью« Задачи »вам придется делать все это рукой. например, 'Parallel.ForEach (ListPerson, pers => pers.CheckPerson())'. Параллельные и параллельные LINQ используют «разделение», чтобы сделать параллельный код более эффективным. –