У меня есть 2 потока, называющих «Task.Factory.StartNew». Давайте просто скажем, что один поток (ThreadA) немного впереди, чем другой (ThreadB).Task.Factory.StartNew гарантированная последовательность выполнения
... в потоке А, вызывается немного вперед
Task.Run(() => {
SomeMethodInThreadA();
});
... в потоке B, немного позже вызывается
Task.Run(() => {
SomeMethodInThreadB();
});
ли TaskScheduler гарантия, что SomeMethodInThreadA запускается на выполнение сначала до SomeMethodInThreadB?
Если нет, то как это сделать? Использовать Task.Factory.StartNew и передать специальный TaskScheduler?
Кроме того, к тому же гарантирует, что SomeMethodInThreadA, обрабатывается первым, я также хочу, чтобы убедиться, что SomeMethodInThreadA заканчивается первый перед выполнением SomeMethodInThreadB.
Я изучил использование StaTaskScheduler, но я не уверен, является ли это решением.
EDIT:
Не давая слишком много деталей/драма о программе я унаследовал, я предполагаю, что я ищу, это обычай TaskScheduler который:
Почести последовательность, когда делегат в очереди
выполняет их последовательно
Делайте это в том же потоке, аналогичный исходному коду StaTaskScheduler, что я связан выше
Не используйте StartNew http://blog.stephencleary.com/2013/08/startnew-is-dangerous.html, если вы действительно не используете другой планировщик (который я, вероятно, не рекомендую) –
Ну, мне нужно, потому что мне как-то нужен специальный TaskScheduler, похожий на то, что пытается сделать StaTaskScheduler. – alpinescrambler
Я чувствую, что вы решаете * неправильную * проблему. –