Информация об изменениях

Сообщение Re[8]: Образцово-показательный интерфейс для EventBus от 24.11.2021 12:48

Изменено 24.11.2021 13:02 Shmj

Re[8]: Образцово-показательный интерфейс для EventBus
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Я ничего в твоем примере не понял, там какая то каша. Никто в коде подписки обработчик события руками не вызывает. Схематически оно выглядит примерно так:

НС>
НС>async static void SubscribeAsync(
НС>  Func<string, CancellationToken, Task> eventHandler,
НС>  CancellationToken cancellation = default)
НС>{
НС>  await nativeClient.SubscribeAsync(
НС>        (nativeParams, canc) => eventHandler(GetModelParams(nativeParams), canc),
НС>        cancellation);
НС>}
НС>


В вашем вызове вы передаете canc. Где его берет nativeClient? Видимо использует тот же cancellation, который вы ему передаете, ведь так? Получается у вас 1 единственный cancellation по сути. Так?

Почему тогда вы его не используете для отмены подписки? В nativeClient.SubscribeAsync он что отменяет?

Кроме того в nativeClient.SubscribeAsync — вы не дожидаетесь выполнения eventHandler — а ведь он задачу возвращает. Значит задача еще не выполнена — а вы уже подтвердите автоматом что событие обработано.
Re[8]: Образцово-показательный интерфейс для EventBus
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Я ничего в твоем примере не понял, там какая то каша. Никто в коде подписки обработчик события руками не вызывает. Схематически оно выглядит примерно так:

НС>
НС>async static void SubscribeAsync(
НС>  Func<string, CancellationToken, Task> eventHandler,
НС>  CancellationToken cancellation = default)
НС>{
НС>  await nativeClient.SubscribeAsync(
НС>        (nativeParams, canc) => eventHandler(GetModelParams(nativeParams), canc),
НС>        cancellation);
НС>}
НС>


В вашем вызове вы передаете canc. Где его берет nativeClient? Видимо использует тот же cancellation, который вы ему передаете, ведь так? Получается у вас 1 единственный cancellation по сути. Так?

Почему тогда вы его не используете для отмены подписки? В nativeClient.SubscribeAsync он что отменяет?

По сути вы переписали nativeClient таким же, как ваш метод. А что если nativeClient работает по классической схеме событий — давайте такой случай рассмотрим для наглядности — там же вручную придется все делать. К примеру клиент для RabbitMQ так и работает — на событиях.