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/

相关文章:

c++ - 为什么我的程序会在拥有线程的情况下生成 LdrpLoaderLock 死锁?

Java : ReentrantReadWriteLock with priority

c#-4.0 - 任务并行库 - 知道所有任务何时完成

c# - 为什么我的 Winforms 应用程序意外退出,但没有错误?

c# - 关于线程池最大线程的说明

android - 在 Activity 之间传递类的实例

c# - 无法正常运行函数或以后台 worker 的身份运行

asp.net-mvc - 将 html 传递给函数 asp.net mvc

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

.net - .NET Framework 4 的向后兼容性