在将任务分配给线程时,我不确定C#是如何工作的。
我想验证一下。是否保证在任何时候,每个任务都由一个且只有一个线程处理,无论该任务正在做什么,即使它刚刚停止或做了Thread.currentThread()。sleep(),该线程也不会去并为任何其他任务服务?那么它在线程和任务之间是1:1吗?无论任务在做什么,即使它刚刚睡觉,或者是通过Task.Run调用任务还是等待Task.Run等?
答案 0 :(得分:3)
有几个案例我知道任务可以重入的地方。一个是一个任务正在等待另一个任务完成,而第一个任务尚未启动。在这种情况下,在当前线程上启动新任务是有道理的。它确实引起了对锁定和任何其他线程局部上下文的一些讨厌的担忧。
如果调度程序认为合适,Task.Factory.StartNew
也可能(显然)执行新的“内联”任务 - 但.NET内置的调度程序不会这样做。
请参阅this other Stack Overflow question,其中包括Stephen Toub(PFX团队)的更详细回复。