Я бы лично использовал один экземпляр BackgroundWorker для каждой из ваших задач. Однако помните, что вы можете вызывать несколько раз один и тот же метод делегата в нескольких различных экземплярах потока.
Имея один BackgroundWorker на задачу с длинным методом, вы будете в достаточной степени контролировать свои методы. Кроме того, насколько я понимаю, когда экземпляр BackgroundWorker выполняет задачу, он занят этой фоновой задачей и поэтому делает ее недоступной для других. Возможно, я, возможно, ошибаюсь, но это в любом случае так, как я бы это сделал, так как ваш обработчик событий DoWork () может делать только то, что от него требуется для этого BackgroundWorker. Поэтому мне кажется невозможным выполнять совершенно разные задачи только для одного экземпляра BackgroundWorker.
Помогает ли это?