在循环中生成多个线程并知道何时完成所有任务

时间:2012-06-12 09:34:05

标签: c#-4.0

我必须在循环中为配置的no生成多个线程。站点然后每个线程有多个子线程。完成所有线程后,我需要执行某些任务以将数据保存到数据库中。我怎么知道是否所有任务都已完成 我目前的代码:

List<SocialDataConfig> configList = SetConfiguration();
foreach (SocialDataConfig config in configList)
{
    new Thread(delegate()
    {
        FetchSocialData(config);
    }).Start();
}
// save fetched data into database and log fetched information in database

private void FetchSocialData(SocialDataConfig config)
{
    for (int i = 0; i < config.ThreadCount; i++)
    {
        Thread thread = new Thread(delegate()
        {
            FetchData(54764876, config);
        });
        thread.Start();
    }
}

1 个答案:

答案 0 :(得分:0)

您可以在C#中使用新的任务库,而不是创建自己的线程。

然后你可以使用这样的东西:

int n = 10;

// Construct started tasks
Task<int>[] tasks = new Task<int>[n];
for (int i = 0; i < n; i++)
{
    tasks[i] = Task<int>.Factory.StartNew(action, i);
}

// Wait for all the tasks to finish.
Task.WaitAll(tasks);

以下是MSDN documentation on WaitAll的完整示例。