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); }
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); }
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); }