gpt4 book ai didi

c# - 异步并等待 For 循环

转载 作者:IT王子 更新时间:2023-10-29 04:30:39 29 4
gpt4 key购买 nike

<分区>

我有一个基于计划运行各种作业的 Windows 服务。确定要运行的作业后,将调度对象列表发送到循环遍历列表并运行每个作业的方法。问题在于,由于外部数据库调用,某些作业最多可能需要 10 分钟才能运行。

我的目标是不让一个作业阻塞队列中的其他作业,基本上一次运行多个作业。我认为使用 async 和 await 可以解决这个问题,但我以前从未使用过这些。

当前代码:

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 会等待作业完成,然后再将控制权交还给循环,而不是让所有作业开始。

我有两个问题:

  1. 高级 - aysnc/await 是最佳选择,还是我应该使用不同的方法?
  2. 需要更新什么以允许循环在不阻塞的情况下启动所有作业,但在所有作业完成之前不允许函数返回?

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com