У меня есть событие, в котором я получаю изменяемое значение. При каждом событии создаю поток и проверяю одной функцией, дошло ли значение до какого-нибудь уровня. Событие возникает каждую секунду, а порой и 2-3 события в секунду. В самой функции я поставил lock
. Соответственно, потоки не успевают обрабатывать так быстро и при отладке я увидел, что создано их штук 40. Как можно ограничить создание потоков до 10 там. Ну, или как-нибудь по-другому реализовать задачу?
private void waitTrade(bool isNewBar)
{
lock (lockerTrade)
{
.............
}
}
Thread th = new Thread(() => waitTrade(false));
th.Start(); // две строчки прописаны в самом событии
Используйте ThreadPool
, и добавляйте ему задачи. Вы можете даже выставить вручную максимальное количество потоков методом SetMaxThreads
(по умолчанию выставляется значение зависящие от количество ядер процессора).
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
После завершения функции f_name на строке label16Invoke(new Action(UpdateLabel)); падает исключение "Поток был прерван, когда находился в состоянии ожидания"
Всем привет! Решаю задачу на шарпе (сразу говорю, что знаю базу лишь шарпа)