public static async Task InitializeAsync(this IPromoter self)
        {
            var invokeException = default(Exception);
            var invokeResult    = default(bool?);

            self.ExceptionDetected += OnExceptionDetected;
            self.Initialize(
                () => invokeResult = true,
                () => invokeResult = false);

            while (!invokeResult.HasValue)
            {
                await Task.Delay(MillisecondsDelay);
            }

            self.ExceptionDetected -= OnExceptionDetected;

            if (!invokeResult.Value)
            {
                throw invokeException ?? new InvalidOperationException();
            }

            void OnExceptionDetected(Exception exception)
            {
                invokeException = exception;
            }
        }
 public PromoterController(IPromoter promoter)
 {
     _promoter = promoter;
 }