Thread.Sleep(1)
will put a thread to sleep for 1ms, but you usually can't get that precision.
However, once thread goes in the sleep state, it takes time for kernel to put it back into the ready queue, and then to put it into the running state when the thread will actually be run again.
All these factors depend on the platform, number of the CPUs, number of the other processes, etc. With non-RT operating system, you can't get any guarantee on this.