Пример #1
0
        public async Task RetryRequestAsync_NoCancellationToken_Timeout()
        {
            // Arrange

            var mockServer = new Mock <IServer>();

            // Act

            var didTimeout = await RequestExecuterBase.RetryRequestAsync(
                () => mockServer.Object,
                async (server, request, token) =>
            {
                try
                {
                    await Task.Delay(2000, token);

                    // Return false if we reached the 2000ms delay
                    return(false);
                }
                catch (TaskCanceledException)
                {
                    // Return true if cancelled due to timeout
                    return(true);
                }
            },
                (request, result) => false,
                new object(),
                CancellationToken.None,
                100);

            // Assert

            Assert.True(didTimeout);
        }
Пример #2
0
        public async Task RetryRequestAsync_CancellationToken_Timeout()
        {
            // Arrange

            var mockServer = new Mock <IServer>();

            var cts = new CancellationTokenSource(2000);

            // Act

            var didTimeout = await RequestExecuterBase.RetryRequestAsync(
                () => mockServer.Object,
                async (server, request, token) =>
            {
                try
                {
                    await Task.Delay(3000, token);

                    // Return false if we reached the 3000ms delay
                    return(false);
                }
                catch (TaskCanceledException)
                {
                    // Return true if cancelled due to timeout
                    // And the triggering token was not the cts
                    return(!cts.IsCancellationRequested);
                }
            },
                (request, result) => false,
                new object(),
                cts.Token,
                100);

            // Assert

            Assert.True(didTimeout);
        }
Пример #3
0
        public async Task RetryRequestAsync_CancellationToken_CanBeCancelled()
        {
            // Arrange

            var mockServer = new Mock <IServer>();

            var cts = new CancellationTokenSource(100);

            // Act

            var wasCancelledByCts = await RequestExecuterBase.RetryRequestAsync(
                () => mockServer.Object,
                async (server, request, token) =>
            {
                try
                {
                    await Task.Delay(1000, token);

                    // Return false if we reached the 2000ms delay
                    return(false);
                }
                catch (TaskCanceledException)
                {
                    // Return true if cancelled due to cts
                    return(true);
                }
            },
                (request, result) => false,
                new object(),
                cts.Token,
                2000);

            // Assert

            Assert.True(wasCancelledByCts);
        }