我有500个ID要处理。这是我的代码
double task_delay_threshold = 3000;
int threshold = 4;
var lst_of_tasks = new List<Task>();
for (var i = 0; i < ids.Count; i += threshold)
{
var ids_to_process = ids.Skip(i).Take(threshold).ToList();
foreach (var c in ids_to_process)
{
var task = Task.Run(() => DoProcess(accessToken, c, userId, programId, guid, fbModel);
lst_of_tasks.Add(task);
}
await Task.WhenAll(lst_of_tasks.ToArray());
await Task.Delay(TimeSpan.FromMilliseconds(task_delay_threshold));
lst_of_tasks.RemoveAll(x => x.IsCompleted);
}
在do过程中,我通过传递id来调用外部web api,然后在提取数据后我在db中插入数据
问题是处理100或有时120或更多,我的此过程自动停止。我注意到记录的异常是线程被中止
但是当我处理100或更少时,它正在处理所有ID,但超过100个抛出异常或有时不给任何东西停止
我试过了 并等待两个函数
答案 0 :(得分:0)
可能会有一些时间问题正在处理,需要处理大量的任务,而且我不太明白循环中的循环是如何工作的。我倾向于简化(假设你已经引用了Linq):
double task_delay_threshold = 3000;
int threshold = 4;
var lst_of_tasks = ids_to_process.Select(p => Task.Run(() => DoProcess(accessToken, p, userId, programId, guid, fbModel)).ToArray();
await Task.WhenAll(lst_of_tasks.ToArray());
await Task.Delay(TimeSpan.FromMilliseconds(task_delay_threshold));