Здравствуйте.
У меня такая проблема.Есть консольное приложение с двумя классами Reader и Writer.В каждом классе определен метод run который работает в отдельном потоке. Раньше я создавал потоки в конструкторах так:
threadWriter = new Thread(run);
threadWriter.IsBackground = true;
threadWriter.Start();
И все работало замечательно.Мне настоятельно порекомендовали использовать для этих целей BackgroundWorker. В сам код я никаких изменений не вносил, кроме того что потоки стали создаваться так:
threadReader = new BackgroundWorker();
threadReader.DoWork += run;
threadReader.RunWorkerAsync();
И вроде как ничего не изменилось.Но потом я заметил одно отличие.
Все потоки создаются одновременно обработчиками одного события главного класса.
И если скажем создать 3 объекта Writer и 3 объекта Reader, то раньше они начинали работать одновременно.
Но с переходом на BackgroundWorker потоки вступают в работу с небольшой задержкой т.е сначала работает только один поток потом секунды через две к нему подключается второй (далее они начинают работать вместе как надо) затем секунды через две — третий и т.д.
В конечно итоге приложение начинает работать в нормальном режиме как и планируется.
Тестировал на нескольких одноядерных машинах проблема остается.
Но для двуядерных процессоров такой проблемы не наблюдается, все сразу же работает как надо.
Вопрос следующий. Проблема в том что я что то не так понимаю и не так делаю?
Или же действительно BackgroundWorker медленнее "входит в ритм" и в чем же тогда его преимущества:?