Если я правильно понимаю, то в том же.
Однако, каким образом Callback
на Timer
вызывается в потоке из пула потоков?
The method specified for callback should be reentrant, because it is called on ThreadPool threads. The method can be executed simultaneously on two thread pool threads if the timer interval is less than the time required to execute the method, or if all thread pool threads are in use and the method is queued multiple times.
Вроде, в исходниках не вижу явного создания нового потока...
[System.Security.SecurityCritical]
[ResourceExposure(ResourceScope.None)]
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
static extern bool ChangeAppDomainTimer(AppDomainTimerSafeHandle handle, uint dueTime);
[System.Security.SecurityCritical]
[ResourceExposure(ResourceScope.None)]
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
[SuppressUnmanagedCodeSecurity]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
static extern bool DeleteAppDomainTimer(IntPtr handle);
В действительности, ваш коллбек вызывается сервисами CLR, которые используют потоки из пула. Из прототипов методов для создани таймера, видно, что потоки не сознаются в managed коде.ref
Функция CallCallback уже выполняется в пуле потоков, надо смотреть кто ее вызывает. А вызвана она может быть двумя способами.
Первый вариант - из метода FireQueuedTimerCompletion
, которая передается в пул потоков методом QueueTimerCompletion
Второй вариант - из метода AppDomainTimerCallback
. В исходниках coreclr видно, что он передается в пул потоков методом ThreadpoolMgr::FireTimers
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Всем доброго времени сутокСоздаю Excel файл с помощью epplus добаляю в него линейный (eChartType
Я пишу программу используя SocketIODotNetХочу TextBlock присвоить переданное значение из сокета
Возвращаясь к проблеме данного кода Глобальный хук клавишОказалось он работает, НО только при установке Цели платформы х32