Я только начал изучать «Threading in C#». Я нашел в книге, что Thread.Sleep (0) немедленно отказывается от текущего временного фрагмента потока, добровольно передавая CPU другим потокам.Thread.Sleep (0) не работает должным образом
Когда я написал несколько строк кода, чтобы проверить его. Я не получил ожидаемого результата. Вот код, который я написал.
class Program
{
static void Main(string[] args)
{
Thread.CurrentThread.Name = "Thread A(main thread)";
Thread thread = new Thread(PrintNumber);
thread.Name = "Thread B";
thread.Start();
for (int i = 0; i < 40; i++)
{
Console.WriteLine("{0} | i = {1}", Thread.CurrentThread.Name, i);
}
}
void PrintNumber()
{
for (int i = 0; i < 40; i++)
{
Console.WriteLine("{0} | i = {1}", Thread.CurrentThread.Name, i);
if (i == 4)
{
Thread.Sleep(0);
}
}
}
}
По моему разумению это будет печатать до 4 в потоке B, то он возобновит нить A. Следующий график нити непредсказуемо. Но этого не происходит. В то время как речь идет о потоке B впервые, иногда он печатает до 6, иногда 8 означает совершенно непредсказуемый.
Так ли моя концепция Theread.Sleep (0) неверна? Может кто-то пожалуйста, уточнить понятие
Я нашел эту ветку во время поиска. Я забыл об этом и подумал, что он описывает разные проблемы. Теперь я вижу, что он задает почти такой же вопрос, как и я. Извините за повторение. – amitavak