Используйте асинхронных делегатов или ThreadPool. QueueUserWorkItem для крупного параллелизма?

Это всего лишь предупреждение, а не ошибка: он не влияет на ваш код, вы можете просто проигнорировать его.
В GitHub есть открытая проблема ( link ), в которой говорится, что это ошибка, вызванная внутренним использованием метода discord.js, который был помечен как устаревший. Один из разработчиков сказал, что исправит это в следующем выпуске, а пока просто игнорируйте его.

6
задан Coral Doe 1 November 2012 в 11:21
поделиться

2 ответа

В этом случае не много, поскольку они оба используют пул потоков под капотом. Я сказал бы, что QueueUserWorkItem () легче считать и видеть то, что продолжается по сравнению с BeginInvoke.

Эта ссылка может помочь. Это - более старая информация, но все еще главным образом применимый http://www.yoda.arachsys.com/csharp/threads/threadpool.shtml

6
ответ дан 8 December 2019 в 18:43
поделиться

Литеральный ответ на вопрос - то, что оба используют пул потоков, таким образом, различие не очень, если производительность является единственным соображением.

Если вопрос действительно о получении лучшей производительности, то это может помочь знать, что использование пула потоков действительно имеет проблемы. Они включают:

  • Конкуренция за блокировку на очереди заданий
  • Чрезмерное контекстное переключение. Если у Вас есть 2 центральных процессора и последовательность объектов работы затем, 25 потоков действительно не помогают. Лучше иметь 2 потока, один для каждого ЦП

Могло бы стоить исследовать TPL и PLINQ:

Один пример, который они дают используемого TPL:

for (int i = 0; i < 100; i++) { 
  a[i] = a[i]*a[i]; 
}

кому:

Parallel.For(0, 100, delegate(int i) { 
  a[i] = a[i]*a[i]; 
});
7
ответ дан 8 December 2019 в 18:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: