Так здесь просто проблема, которую решает этот паттерн перевернута с ног на голову. Не плохо было бы обратиться к первоисточнику где указано, что на самом деле решает этот паттерн:
How to reliably/atomically update the database and send messages/events?
И откровенно странно выглядит один из минусов — необходимость наличия базы.
А самая интересная тема, как доставить сообщения до брокера — не раскрыта. Ни чего не сказано про механизм CDC (Capture Data Change)
А можно пример «приоритизации сообщений», чтобы было лучше понятно о чем речь? Почему было не объединить эти два топика в один и не выбрать ключ сообщений таким образом чтобы обрабатывать их в правильном порядке?
Если речь про одновременные запросы в разных потоках, то они будут запущены все равно в рамках разных задач (Task) и контекст синхронизации будет разный и у каждой задачи опять будет свой AsyncLocal.Value.
Инстанст ConcurrentBag он свой на каждый запрос, а внутри async/await не может быть одновременно несколько рабочих потоков, которые будут конкурировать за ConcurrentBag. Даже если после await продолжение задачи (Task) попадет на другой поток из пула, она будет выполнена последовательно относительно других задач.
А какой смысл там в lock'ах и ConcurrentBag'е? Если используется только async/await и потоки не создаются «руками», то как раз AsyncLocal.Value исключает конкурентный доступ в рамках одной цепочки задач (Task'ов).
И откровенно странно выглядит один из минусов — необходимость наличия базы.
А самая интересная тема, как доставить сообщения до брокера — не раскрыта. Ни чего не сказано про механизм CDC (Capture Data Change)
Клавиатура всем устраивает и на ближайший аналог из-за этих F-клавиш не хочется переходить
ожидаем выведет на консоль 0
Инстанст ConcurrentBag он свой на каждый запрос, а внутри async/await не может быть одновременно несколько рабочих потоков, которые будут конкурировать за ConcurrentBag. Даже если после await продолжение задачи (Task) попадет на другой поток из пула, она будет выполнена последовательно относительно других задач.