Как получить версию события, добавленного в поток

Я пишу в поток EventStore, используя вызов C# API AppendToStreamAsync(). Я вижу, что, хотя это возвращает WriteResult, версия добавленного события не возвращается. Я не могу полагаться на NextExpectedVersion, так как в этот поток могут писать несколько клиентов.

Я мог бы подписаться на поток и ждать появления «моего» события, но я пропустил что-то еще, документация довольно проста и даже не упоминает возвращаемый тип.

Что считается лучшим способом получить этот номер?


person Dutts    schedule 08.02.2017    source источник
comment
Я просто начинаю смотреть на EventStore и применять его в отдельной ветке. Все еще не могу найти ответ - можно ли предположить, что WriteResult.NextExpectedVersion эффективно представляет Event.EventNumber нового события? Я провел несколько одновременных тестов, и они выглядят согласованными, но в официальных документах до сих пор нет такой информации.   -  person Dmitry Gusarov    schedule 13.05.2019


Ответы (1)


Версия не нужна, потому что перед записью потока вы знаете версию вашего агрегата (потока), поэтому, когда запись прошла успешно, вы знаете версию.

Прежде чем вы запишете новое событие в поток, вы должны прочитать поток, чтобы регидратировать агрегат. Тогда вы знаете версию. Потому что, когда другой писатель записал в тот же поток, вы должны сначала получить новое состояние. (Если у вас все еще есть агрегат в памяти, вы можете запросить текущую версию в своем агрегате)

Если оптимистическая блокировка не нужна, вы можете указать ЛЮБУЮ версию при записи потока. (Это можно сделать, когда поток является просто потоком регистрации)

person Ariën    schedule 19.02.2017
comment
Вы не всегда знаете количество событий в своем потоке, потому что вы можете использовать потоки для других целей, кроме агрегатов. - person Henrik; 24.11.2018