2010-09-29 2 views

ответ

1

Thread.Sleep в рабочем режиме. Конечно, это будет пустой тратой ресурсов нитей, потому что пока она приостановлена, она не делает никакой полезной работы, и потоки предназначены для полезной работы :-)

+0

Не обязательно хорошая идея (как указывают Дарин и Брайан), так как это держит нить занятой, ничего полезной. Одной из причин использования асинхронных методов является сокращение использования ресурсов за счет обеспечения эффективной работы запланированных потоков. Возможным решением является использование: wait TaskEx.Delay (...), который не будет использовать нити в ожидании. Однако в зависимости от того, как это реализовано, это может вызвать проблему слишком большого количества активных таймеров, особенно с большим параллельным программным обеспечением. (TaskEx.Delay() находится в async CTP - я считаю, что это может измениться на Task.Delay() в RTM) – Chris

1

У вас есть несколько вариантов: Как указывает @Darin, вы можете используйте Thread.Sleep, что полезно, если вы хотите дождаться определенной продолжительности и не занимать соответствующее ядро ​​во время этого. Если вы хотите подождать очень короткое время, то Thread.SpinWait может быть лучшим вариантом, так как вы можете избежать переключения контекста, связанного с Sleep. Если вы хотите дождаться определенного события, вы можете использовать EventWaitHandle.

Смежные вопросы