У меня есть служба Windows, которая запускает различные задания по расписанию. После определения того, какие задания запускаются, список объектов расписания отправляется методу, который выполняет итерацию по списку и запускает каждое задание. Проблема в том, что некоторые задания могут занять до 10 минут из-за внешних вызовов базы данных.
Моя цель состоит в том, чтобы не иметь одного другого блока заданий в очереди, в основном, более одного запуска за раз. Я думал, что использование async и ожидания может состоять в том, чтобы разрешить это, но я никогда не использовал их раньше.
Текущий код:
public static bool Load(List<Schedule> scheduleList)
{
foreach (Schedule schedule in scheduleList)
{
Load(schedule.ScheduleId);
}
return true;
}
public static bool Load(int scheduleId)
{
// make database and other external resource calls
// some jobs run for up to 10 minutes
return true;
}
Я попробовал обновить этот код:
public async static Task<bool> LoadAsync(List<Schedule> scheduleList)
{
foreach (Schedule schedule in scheduleList)
{
bool result = await LoadAsync((int)schedule.JobId, schedule.ScheduleId);
}
return true;
}
public async static Task<bool> LoadAsync(int scheduleId)
{
// make database and other external resource calls
// some jobs run for up to 10 minutes
return true;
}
Проблема заключается в том, что первый LoadAsync ожидает завершения задания, прежде чем возвращать управление в цикл, а не разрешать запуск всех заданий.
У меня есть два вопроса:
- Высокий уровень. Являются ли aysnc/ожидают лучший выбор или я должен использовать другой подход?
- Что нужно обновить, чтобы цикл мог запускать все задания без блокировки, но не позволять функции возвращаться до тех пор, пока все задания не будут завершены?