1
в этом коде не очень особенный; всегда будет в конечном итоге спать дольше, так как все не так точно, и отказ от вашего временного интервала не дает никакой гарантии от ОС, когда вы его вернете.
Назначение параметра времени в Thread.Sleep()
состоит в том, что ваш поток выдаст за как минимум это количество времени, примерно.
Так что этот код просто явно отказывается от своего временного интервала. Вообще говоря, такой фрагмент кода не требуется, поскольку ОС будет управлять вашими потоками за вас, прерывая их прерывание для работы в других потоках.
Этот вид кода часто используется в «примерах потоков», когда писатель хочет заставить какое-то искусственное вхождение, чтобы доказать какое-либо состояние расы или тому подобное (что, по-видимому, имеет место в вашем примере)
Как отмечается в ответе Джона Ханны на этот же вопрос, между Sleep(0)
и Sleep(1)
(или любым другим ненулевым числом) есть тонкое, но важное различие, и, как намекает ChrisF, это может быть важно в некоторые ситуации с потоками.
Оба из них связаны с приоритетами потоков; Потокам могут быть назначены более высокие / более низкие приоритеты, так что потоки с более низким приоритетом никогда не будут выполняться, пока существуют потоки с более высоким приоритетом, которые должны выполнить какую-либо работу. В таком случае может потребоваться Sleep(1)
... Однако ...
Потоки с низким приоритетом также зависят от того, что другие процессы делают в той же системе; так что, хотя в вашем процессе не могут быть запущены потоки с более высоким приоритетом, если другие работают, ваши все равно не будут работать.
Это не обычно , о чем вам когда-либо нужно беспокоиться; приоритет по умолчанию - это «нормальный» приоритет, и в большинстве случаев его не следует менять. Повышение или понижение имеет многочисленные последствия.