private async Task <IMessage> SubscribeToEvents(IBus bus, IMessage message, IMessagesWaiter messagesWaiter)
        {
            // Handle only commands
            if (message is ICommand)
            {
                // Create events to subscribe for this command
                Type[] eventTypes = EventTypes.Select(t => t.IsGenericTypeDefinition ? t.MakeGenericType(message.GetType()) : t).ToArray();
                // Create wait task
                using (IMessageWaiter messageWaiter = await messagesWaiter.GetAsync(eventTypes, m => m is ICommandEvent ce && ce.CommandId == message.MessageId))
                {
                    return(await messageWaiter.WhenAsync(TimeSpan.FromSeconds(30)));
                }
            }

            return(null);
        }