TPL - 将Task设置为Thread.Sleep很长一段时间

时间:2011-11-23 03:52:26

标签: c# task-parallel-library threadpool

我有一个使用.NET任务并行库的测试:

static void Main(string[] args)
{
    for(int i = 0; i < 1000; i++)
    {
        int n = i;
        Task.Factory.StartNew(() => TaskTest(n));
    }
}

static void TaskTest(int i)
{
    // Will sleep for a long time
    Thread.Sleep(TimeSpan.FromMinutes(i));
    // Do something here
}

有一点我不确定:当上面代码中的Thread.Sleep执行时,会发生什么?我知道它不会占用ThreadPool中的一个线程,如果我将多个任务设置为Thread.Sleep很长一段时间(如24小时)有什么缺点吗?

1 个答案:

答案 0 :(得分:2)

这将占用ThreadPool中的一个线程。尝试运行代码,你会发现整个线程池被等待的任务占用。使用方法:

        List<Task> tasks = new List<Task>();

        for (int i = 0; i < 1000; i++)
        {
            int n = i;
            tasks.Add(Task.Factory.StartNew(() => TaskTest(n)));
        }

        Task.WaitAll(tasks.ToArray());

ParallelExtensionsExtras项目包含一个名为StartNewDelayed的TaskFactory扩展方法,您可以在其中安排任务。请参阅:http://geekswithblogs.net/JoshReuben/archive/2010/11/14/parallel-extensions-extras.aspx

相关问题