public DatabusSynchronizationContext <TMessage> Publish <TMessage>(object message) where TMessage : class
        {
            TaskUtil.Await(_dataBus.Publish <TMessage>(message));
            var databusSynchronizationContext = new DatabusSynchronizationContext <TMessage>(_publishResetEvent, _messageHandleResetEvent);

            _databusSynchronizationContext = databusSynchronizationContext;
            return(databusSynchronizationContext);
        }
        public IDatabusSynchronizationContext Publish(object message)
        {
            TaskUtil.Await(_dataBus.Publish(message));
            var databusSynchronizationContext = new DatabusSynchronizationContext <object>(_publishResetEvent, _messageHandleResetEvent);

            _databusSynchronizationContext = databusSynchronizationContext;
            return(databusSynchronizationContext);
        }
 public async Task Handler <TMessage>(ConsumeContext <TMessage> context) where TMessage : class
 {
     try
     {
         _messageHandleResetEvent.WaitOne();
         await _databusSynchronizationContext.MessageHandle(context.Message);
     }
     finally
     {
         _databusSynchronizationContext?.Dispose();
         _databusSynchronizationContext = null;
         _publishResetEvent.Set();
     }
 }