在C#中,两个任务是否可以同时在同一个线程上运行?

在C#中,两个任务是否可以同时在同一个线程上运行?,c#,multithreading,synchronization,C#,Multithreading,Synchronization,我不确定在给线程分配任务时C#是如何工作的 我想核实一下。是否保证在任何时候,每个任务都由一个且只有一个线程处理,而不管该任务正在做什么,即使它刚刚停止或执行了thread.currentThread().sleep(),该线程也不会执行并服务于任何其他任务?那么线程和任务之间的比例是1:1?无论任务在做什么,即使只是在睡觉,或者任务是通过task.Run或wait task.Run等调用的?我知道有几种情况下任务可以重新进入。一种情况是,一项任务正在等待另一项任务完成,而第一项任务尚未开始。在

我不确定在给线程分配任务时C#是如何工作的


我想核实一下。是否保证在任何时候,每个任务都由一个且只有一个线程处理,而不管该任务正在做什么,即使它刚刚停止或执行了thread.currentThread().sleep(),该线程也不会执行并服务于任何其他任务?那么线程和任务之间的比例是1:1?无论任务在做什么,即使只是在睡觉,或者任务是通过task.Run或wait task.Run等调用的?

我知道有几种情况下任务可以重新进入。一种情况是,一项任务正在等待另一项任务完成,而第一项任务尚未开始。在这种情况下,在当前线程上启动新任务是有意义的。。。某种程度上。它确实引起了一些关于锁定和任何其他线程本地上下文的令人不快的担忧

如果调度器认为合适的话,
Task.Factory.StartNew
也可以(显然)以“内联”方式执行新任务,但是.NET中内置的调度器不会这样做


请参阅其中包含Stephen Toub(PFX团队成员)更详细的回复。

非常感谢。因此,如果两个任务都已启动,但都没有返回,那么它们在同一线程上执行是100%不可能的?@xander:请参阅我的编辑-鉴于您可以构建自己的任务调度程序,很难给出任何绝对值。仔细阅读Stephen Toub的回答可能是最好的选择。请注意,据我所知,任务不会更改线程-因此,如果这两个任务已经在不同的线程上启动,它们以后不会都在同一个线程上结束。非常感谢您的参考。我唯一有点不确定的是:“如果这两个任务已经在不同的线程上启动了”。默认行为是在不同的线程上启动任务,而不使用前面提到的特殊情况吗?