Вы могли использовать массивы CopyTo()
метод.
Или с LINQ можно использовать Skip()
и Take()
...
byte[] arr = {1, 2, 3, 4, 5, 6, 7, 8};
var subset = arr.Skip(2).Take(2);
Есть два отличия. Первый упомянут в документации MSDN для SwitchToThread :
Выход выполнения ограничен процессором вызывающего потока. Операционная система не переключит выполнение на другой процессор, даже если этот процессор простаивает или выполняет поток с более низким приоритетом.
Sleep (0) также разрешает выполнение потоков на других процессорах.
Только SwitchToThread уступает также контексту планирования одного потока. С другой стороны, сон имеет несколько условий, которых он ждет. Документация для SleepEx подробно описывает это:
* An I/O completion callback function is called
* An asynchronous procedure call (APC) is queued to the thread.
* The time-out interval elapses
Это приведет к использованию нескольких потоков.
В общем, Sleep (0) с гораздо большей вероятностью приведет к временному интервалу и ВСЕГДА дает в ОС, даже если нет других ожидающих потоков. Вот почему добавление Sleep (0) в цикл во многих случаях увеличивает использование процессора со 100% (на ядро) почти до 0%. SwitchToThread не будет, если другой поток не ожидает временного отрезка.