multithreading - Thread.Sleep 'breaks'任务

原文 标签 multithreading c#-4.0 .net-4.0 task thread-sleep

所以我有以下代码

 Action d = () =>
                {                                                             
                   for (int i = 0; i <= 10; i++)
                   {
                      Thread.Sleep(50);
                      Console.WriteLine("Task: {0} log:{1}",Thread.CurrentThread.ManagedThreadId,i);
                   }
                };
 Task.Factory.StartNew(d);

但是,它不会输出任何内容。但是,如果我评论Thread.Sleep,它会按预期工作。根据值的不同,使用不同的“ sleep ”值可以获取或多或少的结果。

为什么会这样发生?

最佳答案

我怀疑您的程序在任务有机会运行之前就已退出。

默认情况下,任务在线程池线程(即后台线程)上运行。这意味着您的程序在退出之前不会等待它们完成。

尝试在您的主线程上添加此代码:

var task = Task.Factory.StartNew( d );
task.Wait();

关于multithreading - Thread.Sleep 'breaks'任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8322634/

相关文章:

java - 将Java类方法添加到新线程中

c#-4.0 - .NET 4.0+ 中是否可以使用扩展方法扩展静态类?

c# - 将 Func 委托(delegate)为属性

c# - 每个 new System.Threading.Tasks.Task() 都会创建一个新线程吗?

c - 如何找到哪个线程卡住了

c++ - 提升::ASIO。确保仅在调用 async_receive(...) 后调用 io_service.run() ?

c# - Monitor.TryEnter 和 lock() 是否一起工作?

linq - 使用 lambda 连接对象的字符串属性

c# - 从结构数组中删除重复项

asp.net - 无法在嵌入式 ASPX 代码中引用动态对象