Обработка сетевых команд с потоком данных TPL

Я работаю над системой, которая включает в себя прием команд через сетевое соединение TCP, а затем отправку ответов при выполнении этих команд.Довольно простые вещи, но я хочу поддержать несколько требований:Несколько клиентов могут подключаться одновременно и устанавливать отдельные сеансы.Сеансы могут длиться сколь угодно долго или как можно короче, при этом один и тот же клиентский IP-адрес может при желании устанавливать несколько параллельных сеансов.Каждый сеанс может обрабатывать несколько команд одновременно, поскольку некоторые из запрошенных операций могут выполняться параллельно.Я хотел бы реализовать это чисто, используя async /await, и, исходя из того, что я прочитал, TPL Dataflow звучит как хороший способ аккуратно разбить обработку на красивые фрагменты, которые могут выполняться в пуле потоков вместо того, чтобы связывать потокидля разных сессий /команд, блокировка по дескрипторам ожидания.Это то, с чего я начинаю (некоторые части удалены для упрощения, например, детали обработки исключений; я также опустил оболочку, которая обеспечивает эффективное ожидание для сетевого ввода-вывода):Основы кажутся простыми, но одна часть меня сбивает с толку: как убедиться, что при закрытии приложения я жду завершения всех ожидающих командных задач?Я получаю объект Task, когда использую Task.Run для выполнения команды, но как мне отслеживать ожидающие команды, чтобы я мог убедиться, что все они выполнены, прежде чем позволить службе завершить работу?Я рассматривал возможность использования простого списка с удалением команд из списка по мере их завершения, но мне интересно, не хватает ли мне некоторых основных инструментов в потоке данных TPL, которые позволили бы мне сделать это более аккуратно.РЕДАКТИРОВАТЬ:Читая больше о потоке данных TPL, мне интересно, должен ли я использовать TransformBlock с увеличенным MaxDegreeOfParallelism, чтобы разрешить обработку параллельных команд?Это устанавливает верхний предел количества команд, которые могут выполняться параллельно, но я думаю, что это разумное ограничение для моей системы.Мне любопытно услышать мнение тех, кто имеет опыт работы с TPL Dataflow, чтобы узнать, на правильном ли я пути.
7 голосов | спросил Dan Bryant 31 Jpm1000000pmFri, 31 Jan 2014 20:32:43 +040014 2014, 20:32:43

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132