.NET 4.x Многопоточная работа с БД, отправка данных, обновление. Есть ли готовые решения? - C#
Формулировка задачи:
Поток "1" читает данные, другие потоки берут из потока "1" и что-то делают. Если по какой-то причине поток "1" падает, то он сам восстанавливается и снова начинает читать данные.
Если поток "1" по какой-то причине прекратил работу досрочно, а приложение не получало команду на завершение работы (остановить службу Windows), то диспетчер потоков снова запускает поток "1", пусть по факту это другой поток, но главное, что работа не останавливается.
Если завершили работу, то все потоки корректно завершаются. То есть есть механизм отправки команды на завершение работы.
И возник у меня вопрос. А не подойдёт ли тут Akka.net? У меня очень мало времени на принятие решения, что я буду использовать. Я почитать-то почитаю, но вдруг мне тут подскажут сразу всё по полочкам. Будет отлично.
Да вот например. Я часть посмотрел, вроде эта штука может даже больше, чем мне нужно.
По факту, скорее всего, будет так:
Есть в БД 5 таблиц, будет работать несколько задач, например, 5, которые будут использовать 4 потока, чтобы читать и накапливать данные в кэш, из которого несколько других задач будут отправлять данные на другой сервер, а потом ещё апдейтить записи в таблицах. Вот такую штуку можно написать и руками, но хотелось бы заюзать что-то, что под подобные задачи заточено, что использовать будет явно лучше в плане того, что другие люди читающие код сразу вникнут в суть происходящего, ибо тоже знакомы с инструментом. В общем, мне не для целей обучения, так что нужно по максимому использовать готовые проверенные решения. Есть такие на примете?
Решение задачи: «.NET 4.x Многопоточная работа с БД, отправка данных, обновление. Есть ли готовые решения?»
textual
Листинг программы
class Program { static void Main(string[] args) { //описываем блоки обработки //в нем накапливаем данные var buffer = new BufferBlock<int>(); //через brodcaster можем передавать одновременно в разные обработчики var brodcaster = new BroadcastBlock<int>(m => m); //обработчики поступающей информации var action1 = new ActionBlock<int>(m => Console.WriteLine(m * 2)); var action2 = new ActionBlock<int>(m => Console.WriteLine(m + 1)); var action3 = new ActionBlock<int>(m => Console.WriteLine(m - 1)); var action4 = new ActionBlock<int>(m => Console.WriteLine(Math.Pow(m, 2))); //описываем цепочку обработки buffer->broadcaster->action1,2,3,4 buffer.LinkTo(brodcaster); brodcaster.LinkTo(action1); brodcaster.LinkTo(action2, m => m % 2 == 0);//можно добавить условие передачи в узел brodcaster.LinkTo(action3); brodcaster.LinkTo(action4); //передаем данные в буфер и они по цепочке будут переходить дальше for (int i = 0; i < 10; i++) { buffer.Post(i); Thread.Sleep(1000); Console.WriteLine(); } Console.ReadKey(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д