【发布时间】:2016-04-29 13:26:06
【问题描述】:
我有 2 个线程调用“Task.Factory.StartNew”。假设一个线程 (ThreadA) 比另一个线程 (ThreadB) 稍微领先。
...在线程 A 中,稍微提前调用
Task.Run(() => {
SomeMethodInThreadA();
});
...在线程 B 中,稍后调用
Task.Run(() => {
SomeMethodInThreadB();
});
TaskScheduler 是否保证 SomeMethodInThreadA 在 SomeMethodInThreadB 之前先执行?
如果没有,我该怎么做?使用 Task.Factory.StartNew 并传入特殊的 TaskScheduler?
另外,除了保证 SomeMethodInThreadA 先被处理外,我还想确保 SomeMethodInThreadA 在执行 SomeMethodInThreadB 之前先完成。
我已经研究过使用StaTaskScheduler,但我不确定这是否是解决方案。
编辑:
没有给出太多关于我继承的程序的细节/戏剧,我想我正在寻找的是一个自定义的 TaskScheduler:
在代表排队时遵守序列
串行执行
在同一个线程中执行,类似于我上面链接的 StaTaskScheduler 源代码
【问题讨论】:
-
不要使用 StartNew blog.stephencleary.com/2013/08/startnew-is-dangerous.html 除非您确实使用了不同的调度程序(我可能不会推荐)
-
好吧,我不得不这样做,因为我不知何故需要一个特殊的 TaskScheduler,类似于 StaTaskScheduler 正在尝试做的事情。
-
我觉得你在解决错误问题。
-
如果有保证,那么所有任务都将在全球范围内序列化。这与只有一个线程运行任务相同。
-
{ SomeMethodInThreadA(); SomeMethodInThreadB(); }怎么样?
标签: c# multithreading task-parallel-library task