Если вы хотите, чтобы текущая страница взаимодействовала с долго выполняющейся задачей, вам не обязательно нужны служебные данные BackgroundService. Эта функция предназначена для случаев, когда нет страницы для взаимодействия.
Во-первых, сервер не может вызвать клиента, чтобы сказать ему, чтобы он перезагрузился. По крайней мере, без использования WebSockets, что определенно было бы излишним для этого. Вместо этого вы будете использовать Javascript (AJAX), чтобы выполнять фоновые вызовы для опроса состояния вашей задачи. Это общий шаблон, используемый любым сложным веб-приложением.
На сервере вы создадите обычный метод асинхронного действия, который занимает все время, необходимое для выполнения задачи.
Веб-страница (после загрузки) вызовет этот метод действия с использованием AJAX и проигнорирует ответ. Время ожидания этого вызова истечет, но это не проблема, вам не нужен ответ, и сервер продолжит обрабатывать действие, даже если соединение с сокетом было разорвано.
Веб-страница впоследствии начнет опросить (используя AJAX) другой метод действия, который сообщит вам, завершена ли задача или нет. Вам понадобится некоторое общее состояние на сервере, возможно, таблица базы данных, которая обновляется вашей фоновой задачей и т. Д. Этот метод должен всегда возвращаться очень быстро - все, что ему нужно сделать, это прочитать текущее состояние задачи и вернуть этот статус .
Веб-страница будет продолжать опрашивать этот метод до тех пор, пока ответ не изменится (например, с ЗАПУСКА на ЗАВЕРШЕНО). После изменения статуса вы можете перезагрузить страницу, используя Javascript или все, что вам нужно сделать в ответ на выполнение задачи.
Примечание. Здесь есть некоторые нюансы, например, стоимость удержания клиентских подключений, время ожидания которых вы ожидаете. Если вам не все равно, вы можете оптимизировать их, но в большинстве случаев это не будет проблемой, и это добавляет сложности.