抛出Thread的方法正在超过100个线程中止

时间:2018-04-15 19:59:35

标签: c#

我有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个抛出异常或有时不给任何东西停止

我试过了 并等待两个函数

1 个答案:

答案 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));

我还要看一下exception handling for task-parallel library