public async Task <bool> Publish(object @event, CancellationToken cancellationToken = default) { var eventType = @event.GetType(); var eventTypeCode = eventTypeFinder.GetCode(eventType); var eventId = snowflakeIdGenerator.NextId(); var eventContent = serializer.Serialize(@event, eventType); var eventEntity = new EventEntity { Added = DateTime.UtcNow, Content = eventContent, ExpiresAt = null, Id = eventId, Name = eventTypeCode, Retries = 0, StatusName = nameof(EventStatus.Pending) }; if (Transaction?.DbTransaction == null) { await eventStorage.StoreEvent(eventEntity); } else { await eventStorage.StoreEvent(eventEntity, Transaction.DbTransaction); } PrePublishEventBuffer.Add(eventEntity); return(true); }