Морган Скиннер из Microsoft , похоже, предпочитает RegisterWaitForSingleObject .
Что касается распределения, рефлектор обнаруживает, что RegisterWaitForSingleObject
создает экземпляр RegisteredWaitHandle
, а таймер создает внутренний TimerBase
, а также класс с именем _TimerCallback
. Можно пойти дальше и сравнить размеры этих классов и т. Д., Но они, похоже, имеют больше зависимостей, особенно неуправляемых (обе используют базовые функции win32) - поэтому я действительно не могу дать прямой ответ.
Что касается дескриптора ожидания, переданного RegisterWaitForSingleObject
, имейте в виду, что вы можете выделить один Maunal / AutoResetEvent и передать его всем вызовам (так как вы рассчитываете на тайм-аут, так что вы никогда не будете сигнализировать об этом ).
Что касается производительности, я тоже не уверен. ThreadPool будет использовать специальный ожидающий поток для каждых 63 действий, зарегистрированных через RegisterWaitForSingleObject
. Напротив, таймер будет использовать базовый таймер win32. Оба будут использовать рабочий поток ThreadPool для фактического выполнения. Что лучше в каких сценариях? Бьет меня .. так что я бы пошел со Скиннером на этот:)
Также см .: