示例#1
0
        public void OnMessageAsync(Func <IBrokeredMessage, Task> onMessageAsync, IOnMessageOptions options)
        {
            if (onMessageAsync == null)
            {
                throw new ArgumentNullException(nameof(onMessageAsync));
            }
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            // For now, assume the only implementation is the wrapper type.
            if (!(options is OnMessageOptionsWrapper optionsWrapper))
            {
                throw new ArgumentException(
                          $"Options must be of type {nameof(OnMessageOptionsWrapper)}",
                          nameof(options));
            }

            var onMessageOptions = optionsWrapper.GetOptions();

            onMessageOptions.ExceptionReceived += OnMessageException;

            _client.OnMessageAsync(
                CreateOnMessageAsyncCallback(onMessageAsync),
                onMessageOptions);
        }
            public void PassesMaxConcurrentCallsFurther()
            {
                IOnMessageOptions capturedOptions = null;

                _client
                .Setup(c => c.OnMessageAsync(It.IsAny <Func <IBrokeredMessage, Task> >(), It.IsAny <IOnMessageOptions>()))
                .Callback <Func <IBrokeredMessage, Task>, IOnMessageOptions>((_, opt) => capturedOptions = opt);

                const int expectedConcurrentCalls = 42;

                _target.Start(expectedConcurrentCalls);

                _client
                .Verify(c => c.OnMessageAsync(It.IsAny <Func <IBrokeredMessage, Task> >(), It.IsAny <IOnMessageOptions>()), Times.Once);
                Assert.NotNull(capturedOptions);
                Assert.Equal(expectedConcurrentCalls, capturedOptions.MaxConcurrentCalls);
            }