Я запускаю длительную функцию в качестве фоновой задачи в своем asp.net применение. Перед завершением задачи основной поток завершается (я хочу, чтобы это было только так, так как, если я использую ключевое слово await и заставлю основной поток ждать завершения фоновой задачи, я получу сообщение об ошибке прокси-сервера
Ошибка прокси-сервера
Прокси-сервер получил неверный ответ от вышестоящего сервера, так как фоновая задача слишком длинная
Но после завершения задачи ни я не могу обновить страницу, перенаправив ее на ту же страницу, ни я не могу переопределить пользовательский интерфейс. Есть ли какой-либо способ обновить пользовательский интерфейс после завершения выполнения основного потока.
Мой код звучит так:
protected void btnImport_Click(object sender, EventArgs e)
{
var task = ImportThread();
if (task.IsCompleted)
{
DisplaySuccess("Import success");
}
else
DisplayError("Import failed");
}
private async Task<bool> ImportThread()
{
try
{
var success = await Task<bool>.Run(() => new Manager().Import().ConfigureAwait(false);
if (task.IsCompleted)
{
DisplaySuccess("Import success");
}
else
{
DisplayError("Import failed");
}
return true;
}
Описанная выше асинхронная задача ожидает метода, описанного ниже, который присутствует в другом классе.
public bool Import()
{
// some operations here
return true;
}
После завершения этого метода управление возвращается в ImportThread()
но код, написанный там для переопределения пользовательского интерфейса, не обновляет пользовательский интерфейс. Мне нужно обновить пользовательский интерфейс со статусом импорта. А также от ImportThread
управление также не возвращается к методу события нажатия кнопки.
Пожалуйста, помогите мне любым способом обновить пользовательский интерфейс статуса импорта.
Примечание: Я пытался использовать Redirect.Response
в ImportThread()
чтобы обновить страницу, но это не сработало