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

时间:2013-01-31 15:27:43

标签: c# multithreading synchronization

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

我想验证一下。是否保证在任何时候,每个任务都由一个且只有一个线程处理,无论该任务正在做什么,即使它刚刚停止或做了Thread.currentThread()。sleep(),该线程也不会去并为任何其他任务服务?那么它在线程和任务之间是1:1吗?无论任务在做什么,即使它刚刚睡觉,或者是通过Task.Run调用任务还是等待Task.Run等?

1 个答案:

答案 0 :(得分:3)

有几个案例我知道任务可以重入的地方。一个是一个任务正在等待另一个任务完成,而第一个任务尚未启动。在这种情况下,在当前线程上启动新任务是有道理的。它确实引起了对锁定和任何其他线程局部上下文的一些讨厌的担忧。

如果调度程序认为合适,Task.Factory.StartNew也可能(显然)执行新的“内联”任务 - 但.NET内置的调度程序不会这样做。

请参阅this other Stack Overflow question,其中包括Stephen Toub(PFX团队)的更详细回复。