У меня есть c#. net (4.7.2) веб-приложение rest api, которое должно периодически обмениваться (http) с группой из 100 устройств. В настоящее время у нас в основном есть обработчик событий, который изначально создает один Task.Run
(содержащий работу связи *) на устройство. В конце каждого такого Task.Run
событие будет инициировано, так что этот обработчик событий будет запущен снова. Таким образом, при наличии 100 устройств у нас работает приблизительно 100 короткоживущих «фоновых рабочих потоков», которые все d ie и снова вызывают Task.Run
в течение периода времени ~ 3 секунды. Оказывается, это кажется очень дорогим - на самом деле я подозреваю, что эта архитектура время от времени вызывает серьезные проблемы, такие как «зависание». Я понимаю, что это не лучшая практика, и что вызов Task.Run
не является бесплатным, но периодическое вращение до 100 потоков не должно быть такой большой проблемой - по крайней мере, я так думаю. Мне все равно, если задачи, поставленные в очередь в пуле потоков, отрабатываются с небольшой задержкой из-за управления задачами.
Поэтому мне интересно, какая архитектура подойдет для динамично развивающегося c сокращение фоновой рабочей нагрузки, которая состоит в основном из «асинхронного» кода.
Несмотря на следующие передовые практики - действительно ли при таком подходе Task.Run
/ Eventhandler
действительно есть большая яма?
* Основная работа состоит в установлении http-соединения и ожидании его результата. Наконец, необходимо выполнить чтение / запись в базу данных. Так что это можно сделать с помощью асин * код 1018 *.