Я использую сервис windows для создания отчета, скажем, около 2К. Я также использую TPL для увеличения производительности. Я заметил, что на локальном компьютере он отлично работает для 40 отчетов, но на UAT для 2K он не работает должным образом, он перестает работать ненормально и запускается windows состояние службы. Нет записи в журнале событий в программе просмотра системных событий (я предполагаю, что не получаю запись в журнале событий, потому что состояние службы запущено и оно не прерывается ненормально)
Вот мой блок кода.
foreach (pt_report report in reportCollection)
{
using(dbContent context=new dbContext())
{
//Execute 1 sp which takes around 2 minutes.
//do some db operation to update status of sp execution.
//This step is mandatory for all 2K plan before running Async task.
}
if(report.Status != Completed) //check for completion of report generation
{
Task generateReport = new Task(delegate
{
ScheduleMassReportGeneration(report); // This takes around 2-3 min more to generate pdf.
});
generateReport.Start();
//Problem #1 occurs (see below description).
}
}
Задача № 1:
Я понимаю, что при запуске задачи asyn c мне нужно написать что-то, чтобы подключить поток, чтобы я мог проверить состояние выполнения. Основываясь на приведенном выше коде, я не имею никакого контроля над ним, теперь он как сирота. Теперь я хотел бы взять это под контроль, чтобы я мог проверить, что происходит с этим потоком / задачей, и записать соответствующий статус в базу данных и повторно запустить эту задачу.
PS: Правильная регистрация записана в методе ScheduleMassReportGeneration()
(), чтобы отслеживать, что происходит при создании отчета. Но я не видел никаких признаков ошибки или подозрительных вещей. Это просто ускользает, не оставляя никаких следов.