Skip to content

Commit b1a72ad

Browse files
committed
Added RetryHandler. (#80)
1 parent 60c90fd commit b1a72ad

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

BunqSdk/BunqSdk.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
</PropertyGroup>
2525
<ItemGroup>
2626
<PackageReference Include="Newtonsoft.Json" Version="10.0.3-*" />
27+
<PackageReference Include="Polly" Version="6.0.*" />
2728
<PackageReference Include="System.Collections.Immutable" Version="1.4.0" />
2829
</ItemGroup>
2930
<ItemGroup>

BunqSdk/Http/ApiClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public ApiClient(ApiContext apiContext)
9999

100100
private HttpClient CreateHttpClient()
101101
{
102-
return new HttpClient(CreateHttpClientHandler())
102+
return new HttpClient(new RetryHandler(CreateHttpClientHandler()))
103103
{
104104
BaseAddress = new Uri(apiContext.GetBaseUri())
105105
};

BunqSdk/Http/RetryHandler.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System;
2+
using System.Net.Http;
3+
using System.Threading;
4+
using System.Threading.Tasks;
5+
using Polly;
6+
7+
namespace Bunq.Sdk.Http
8+
{
9+
public class RetryHandler : DelegatingHandler
10+
{
11+
public RetryHandler(HttpClientHandler handler) : base(handler) { }
12+
13+
protected override Task<HttpResponseMessage> SendAsync(
14+
HttpRequestMessage request,
15+
CancellationToken cancellationToken) =>
16+
Policy
17+
.Handle<HttpRequestException>()
18+
.Or<TaskCanceledException>()
19+
.OrResult<HttpResponseMessage>(x => !x.IsSuccessStatusCode)
20+
.WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(3, retryAttempt)))
21+
.ExecuteAsync(() => base.SendAsync(request, cancellationToken));
22+
}
23+
}

0 commit comments

Comments
 (0)