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

发布于 2024-12-17 10:56:30 字数 459 浏览 0 评论 0原文

我有一个使用.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小时)会有什么缺点吗?

I have a test to use .NET Task Parallel Library:

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
}

One thing I'm not sure: When Thread.Sleep in the above code execute, what will happen? I know it will not occupy a thread in the ThreadPool, is there any drawback if I set multiple tasks to Thread.Sleep for a really long time like 24 hours?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

锦欢 2024-12-24 10:56:30

这样就会占用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

This will occupy a thread in the ThreadPool. Try running the code and you'll find out that the whole threadpool is occupied by tasks waiting. use:

        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());

the ParallelExtensionsExtras project contains an extension method for TaskFactory called StartNewDelayed, in which you can schedule a task. See: http://geekswithblogs.net/JoshReuben/archive/2010/11/14/parallel-extensions-extras.aspx

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文