同一个线程可以同时运行不同的任务吗?

时间:2018-03-16 08:06:39

标签: c# task

我遇到的情况是,我需要为每个 任务 运行一个独占单例。目前我使用 [ThreadStatic] 属性来分别保存每个线程的单例实例。但是:我能指望不止一个任务永远不会同时在同一个线程中运行吗? ...否则我的单身人士将在这些任务之间分享。

1 个答案:

答案 0 :(得分:1)

我假设你在谈论CPU绑定任务,例如Task.Run等同。

TPL可以在各种情况下内联任务。这可能导致多个任务在同一个线程和堆栈上。例如,Task.Wait可以运行任务参数,如果它尚未启动且调度程序允许它。

TPL绝对充满了这样的重入,其中Task.WaitTaskCompletionSource.SetResult等看似无害的调用可以运行任意代码。在我看来,这是一个非常讨厌的设计错误。它引发了许多实际问题。我有时会阅读coreclr / corefx提交日志,并且我经常发现错误修复因TPL重入导致的问题。