@@ -10,10 +10,10 @@ namespace SpotifyAPI.Web
1010{
1111 public class SimpleRetryHandler : IRetryHandler
1212 {
13- private readonly Func < TimeSpan , Task > _sleep ;
13+ private readonly Func < TimeSpan , CancellationToken , Task > _sleep ;
1414
1515 /// <summary>
16- /// Specifies after how many miliseconds should a failed request be retried.
16+ /// Specifies after how many milliseconds should a failed request be retried.
1717 /// </summary>
1818 public TimeSpan RetryAfter { get ; set ; }
1919
@@ -38,10 +38,11 @@ public class SimpleRetryHandler : IRetryHandler
3838 /// the Retry-After header
3939 /// </summary>
4040 /// <returns></returns>
41- public SimpleRetryHandler ( ) : this ( Task . Delay ) { }
42- public SimpleRetryHandler ( Func < TimeSpan , Task > sleep )
41+ public SimpleRetryHandler ( ) : this ( sleepWithCancel : Task . Delay ) { }
42+ public SimpleRetryHandler ( Func < TimeSpan , Task > sleep ) : this ( ( t , _ ) => sleep ( t ) ) { }
43+ public SimpleRetryHandler ( Func < TimeSpan , CancellationToken , Task > sleepWithCancel )
4344 {
44- _sleep = sleep ;
45+ _sleep = sleepWithCancel ;
4546 RetryAfter = TimeSpan . FromMilliseconds ( 50 ) ;
4647 RetryTimes = 10 ;
4748 TooManyRequestsConsumesARetry = false ;
@@ -88,15 +89,15 @@ private async Task<IResponse> HandleRetryInternally(
8889 var secondsToWait = ParseTooManyRetries ( response ) ;
8990 if ( secondsToWait != null && ( ! TooManyRequestsConsumesARetry || triesLeft > 0 ) )
9091 {
91- await _sleep ( secondsToWait . Value ) . ConfigureAwait ( false ) ;
92+ await _sleep ( secondsToWait . Value , cancel ) . ConfigureAwait ( false ) ;
9293 response = await retry ( request , cancel ) . ConfigureAwait ( false ) ;
9394 var newTriesLeft = TooManyRequestsConsumesARetry ? triesLeft - 1 : triesLeft ;
9495 return await HandleRetryInternally ( request , response , retry , newTriesLeft , cancel ) . ConfigureAwait ( false ) ;
9596 }
9697
9798 while ( RetryErrorCodes . Contains ( response . StatusCode ) && triesLeft > 0 )
9899 {
99- await _sleep ( RetryAfter ) . ConfigureAwait ( false ) ;
100+ await _sleep ( RetryAfter , cancel ) . ConfigureAwait ( false ) ;
100101 response = await retry ( request , cancel ) . ConfigureAwait ( false ) ;
101102 return await HandleRetryInternally ( request , response , retry , triesLeft - 1 , cancel ) . ConfigureAwait ( false ) ;
102103 }
0 commit comments