Длительный фоновый процесс в asp.net core

93
23 сентября 2019, 03:00

У меня есть web api на asp.net core. По кнопке с формы запускаю фоновую задачу, которая может выполняться до 5 часов.

Проблема такая, что по истечению около 1 часа фоновая задача принудительно завершается.

Сначала фоновую задачу запускал таким способом:

// POST api/analytics/run
[Route("api/[controller]/run")]
[HttpPost]
public async Task<JsonResult> RunAnalyticsAsync([FromBody] DataRequested dataRequested)
{
    await Task.Factory.StartNew(async () =>
    {
        do
        {
            //
        }
        while (report.Status == ReportStatus.Working);
        await CloudTableService.UpdateClientData(report);
    });
}

Как видно из кода данные должны сохраняться в таблицу. Если фоновый поток работает меньше часа, то так и происходит. Если больше, то до сохранения не доходит. Сначала, я подумал, что некорректно запускаю фоновый процесс.

Нашел статью Фоновые задачи с размещенными службами в ASP.NET Core

Выбрал последний вариант: Фоновые задачи в очереди. Адаптировал под свой проект. Запускаю в режиме отладки F5. И где-то через час происходит тоже самое. Еще заметил, что в режиме отладки в visual studio по истечению часа, она(отладка) завершается(окна Вывод, стек вызовов закрывается), информации об исключениях или ошибках нет никакой, web api по-прежнему доступно. При обновлении страницы в веб-приложении(которое работает с web api) информация об активной фоновой задаче пропадает и подгружаются из таблицы результаты предыдущей фоновой задачи.

Активные задачи сохраняю вот в таком классе, который объявлен как синглтон сервис.

public class MemoryCacheService : IMemoryCacheService
{
    public IList<BaseReportRealTime> RealTimeReports { get; }
    public MemoryCacheService()
    {
        RealTimeReports = new List<BaseReportRealTime>();
    }
}
public interface IMemoryCacheService
{
    IList<BaseReportRealTime> RealTimeReports { get; }
}

В чем может быть проблема?

Answer 1

проверьте Idle Timeout в настройках Application Pool вашего сервиса. Cкорее всего процесс сбрасывается самим IIS'ом

READ ALSO
C# windows service ip адрес

C# windows service ip адрес

Как получить ип адрес компьютера в переменную?

91
Использование подключения к MySQL в классе php

Использование подключения к MySQL в классе php

возник такой вопрос, у меня есть вот такой класс

73
Где брать Задачи для опыта? [закрыт]

Где брать Задачи для опыта? [закрыт]

Где можно брать задачи (задания) для получения опыта? Допустим, для того же phpНу и не только

112
преобразовать Nested Set

преобразовать Nested Set

я через api получаю json который декодирую в массив, этот массив содержит дерево категорий в формате nested set перед тем как записать в базу нужно...

93