Да, служба может останавливаться до завершения, но так ли это? Для этого в реестре есть значения тайм-аута. Какая ОС?
Я думаю, вам нужно отделить функцию обратного вызова от другого компонента или сохранить данные на диске и отправить их небольшими фрагментами. Что происходит при отключении питания? Или если кому-то надоело ждать и выключать?
Если данные критически важны, управляйте ими вне памяти и перезапускайте процесс. Это решит ваш длительный процесс выключения. Аналогично способ опроса компонента на предмет прогресса устраняет зависимость от блокировки.