Skip to content

Commit 91e5384

Browse files
authored
API feedback (#1327)
1 parent 6260f7e commit 91e5384

22 files changed

+152
-134
lines changed

bench/Polly.Core.Benchmarks/ResilienceStrategyProviderBenchmark.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ public void Setup()
1717
}
1818

1919
[Benchmark]
20-
public void Get_Ok() => _provider!.Get("dummy");
20+
public void Get_Ok() => _provider!.GetStrategy("dummy");
2121

2222
[Benchmark]
23-
public void Get_Generic_Ok() => _provider!.Get<string>("dummy");
23+
public void Get_Generic_Ok() => _provider!.GetStrategy<string>("dummy");
2424
}

bench/Polly.Core.Benchmarks/TelemetryBenchmark.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ private ResilienceStrategy Build(ResilienceStrategyBuilder builder)
6161
});
6262
}
6363

64-
builder.EnableTelemetry(options);
64+
builder.ConfigureTelemetry(options);
6565
}
6666

6767
return builder.Build();

bench/Polly.Core.Benchmarks/Utils/Helper.MultipleStrategies.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ internal static partial class Helper
4444

4545
if (telemetry)
4646
{
47-
builder.EnableTelemetry(NullLoggerFactory.Instance);
47+
builder.ConfigureTelemetry(NullLoggerFactory.Instance);
4848
}
4949
}),
5050
_ => throw new NotSupportedException()

samples/GenericStrategies/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
var response = await strategy.ExecuteAsync(
6767
async token =>
6868
{
69-
await Task.Delay(10);
69+
await Task.Delay(10, token);
7070
// This causes the action fail, thus using the fallback strategy above
7171
return new HttpResponseMessage(HttpStatusCode.InternalServerError);
7272
},

samples/Intro/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@
2222
strategy.Execute(() => { });
2323

2424
// Asynchronously
25-
await strategy.ExecuteAsync(async token => { await Task.Delay(10); }, CancellationToken.None);
25+
await strategy.ExecuteAsync(async token => { await Task.Delay(10, token); }, CancellationToken.None);
2626

2727
// Synchronously with result
2828
strategy.Execute(token => "some-result");
2929

3030
// Asynchronously with result
31-
await strategy.ExecuteAsync(async token => { await Task.Delay(10); return "some-result"; }, CancellationToken.None);
31+
await strategy.ExecuteAsync(async token => { await Task.Delay(10, token); return "some-result"; }, CancellationToken.None);
3232

3333
// Use state to avoid lambda allocation
3434
strategy.Execute(static state => state, "my-state");

src/Polly.Core/CircuitBreaker/CircuitBreakerResilienceStrategyBuilderExtensions.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public static ResilienceStrategyBuilder AddSimpleCircuitBreaker(this ResilienceS
102102
private static TBuilder AddAdvancedCircuitBreakerCore<TBuilder, TResult>(this TBuilder builder, AdvancedCircuitBreakerStrategyOptions<TResult> options)
103103
where TBuilder : ResilienceStrategyBuilderBase
104104
{
105-
builder.AddStrategy(
105+
return builder.AddStrategy(
106106
context =>
107107
{
108108
var behavior = new AdvancedCircuitBehavior(
@@ -113,15 +113,12 @@ private static TBuilder AddAdvancedCircuitBreakerCore<TBuilder, TResult>(this TB
113113
return CreateStrategy(context, options, behavior);
114114
},
115115
options);
116-
117-
return builder;
118116
}
119117

120118
private static TBuilder AddSimpleCircuitBreakerCore<TBuilder, TResult>(this TBuilder builder, SimpleCircuitBreakerStrategyOptions<TResult> options)
121119
where TBuilder : ResilienceStrategyBuilderBase
122120
{
123-
builder.AddStrategy(context => CreateStrategy(context, options, new ConsecutiveFailuresCircuitBehavior(options.FailureThreshold)), options);
124-
return builder;
121+
return builder.AddStrategy(context => CreateStrategy(context, options, new ConsecutiveFailuresCircuitBehavior(options.FailureThreshold)), options);
125122
}
126123

127124
internal static CircuitBreakerResilienceStrategy CreateStrategy<TResult>(ResilienceStrategyBuilderContext context, CircuitBreakerStrategyOptions<TResult> options, CircuitBehavior behavior)

src/Polly.Core/Registry/ResilienceStrategyProvider.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ public abstract class ResilienceStrategyProvider<TKey>
1717
/// <param name="key">The key used to identify the resilience strategy.</param>
1818
/// <returns>The resilience strategy associated with the specified key.</returns>
1919
/// <exception cref="KeyNotFoundException">Thrown when no resilience strategy is found for the specified key.</exception>
20-
public virtual ResilienceStrategy Get(TKey key)
20+
public virtual ResilienceStrategy GetStrategy(TKey key)
2121
{
22-
if (TryGet(key, out var strategy))
22+
if (TryGetStrategy(key, out var strategy))
2323
{
2424
return strategy;
2525
}
@@ -35,9 +35,9 @@ public virtual ResilienceStrategy Get(TKey key)
3535
/// <param name="key">The key used to identify the resilience strategy.</param>
3636
/// <returns>The resilience strategy associated with the specified key.</returns>
3737
/// <exception cref="KeyNotFoundException">Thrown when no resilience strategy is found for the specified key.</exception>
38-
public virtual ResilienceStrategy<TResult> Get<TResult>(TKey key)
38+
public virtual ResilienceStrategy<TResult> GetStrategy<TResult>(TKey key)
3939
{
40-
if (TryGet<TResult>(key, out var strategy))
40+
if (TryGetStrategy<TResult>(key, out var strategy))
4141
{
4242
return strategy;
4343
}
@@ -52,7 +52,7 @@ public virtual ResilienceStrategy<TResult> Get<TResult>(TKey key)
5252
/// <param name="key">The key used to identify the resilience strategy.</param>
5353
/// <param name="strategy">The output resilience strategy if found, <see langword="null"/> otherwise.</param>
5454
/// <returns><see langword="true"/> if the strategy was found, <see langword="false"/> otherwise.</returns>
55-
public abstract bool TryGet(TKey key, [NotNullWhen(true)] out ResilienceStrategy? strategy);
55+
public abstract bool TryGetStrategy(TKey key, [NotNullWhen(true)] out ResilienceStrategy? strategy);
5656

5757
/// <summary>
5858
/// Tries to get a generic resilience strategy from the provider using the specified key.
@@ -61,5 +61,5 @@ public virtual ResilienceStrategy<TResult> Get<TResult>(TKey key)
6161
/// <param name="key">The key used to identify the resilience strategy.</param>
6262
/// <param name="strategy">The output resilience strategy if found, <see langword="null"/> otherwise.</param>
6363
/// <returns><see langword="true"/> if the strategy was found, <see langword="false"/> otherwise.</returns>
64-
public abstract bool TryGet<TResult>(TKey key, [NotNullWhen(true)] out ResilienceStrategy<TResult>? strategy);
64+
public abstract bool TryGetStrategy<TResult>(TKey key, [NotNullWhen(true)] out ResilienceStrategy<TResult>? strategy);
6565
}

src/Polly.Core/Registry/ResilienceStrategyRegistry.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public ResilienceStrategyRegistry(ResilienceStrategyRegistryOptions<TKey> option
6565
/// <param name="strategy">The resilience strategy instance.</param>
6666
/// <returns><see langword="true"/> if the strategy was added successfully, <see langword="false"/> otherwise.</returns>
6767
/// <exception cref="ArgumentNullException">Thrown when <paramref name="strategy"/> is <see langword="null"/>.</exception>
68-
public bool TryAdd(TKey key, ResilienceStrategy strategy)
68+
public bool TryAddStrategy(TKey key, ResilienceStrategy strategy)
6969
{
7070
Guard.NotNull(strategy);
7171

@@ -80,7 +80,7 @@ public bool TryAdd(TKey key, ResilienceStrategy strategy)
8080
/// <param name="strategy">The resilience strategy instance.</param>
8181
/// <returns><see langword="true"/> if the strategy was added successfully, <see langword="false"/> otherwise.</returns>
8282
/// <exception cref="ArgumentNullException">Thrown when <paramref name="strategy"/> is <see langword="null"/>.</exception>
83-
public bool TryAdd<TResult>(TKey key, ResilienceStrategy<TResult> strategy)
83+
public bool TryAddStrategy<TResult>(TKey key, ResilienceStrategy<TResult> strategy)
8484
{
8585
Guard.NotNull(strategy);
8686

@@ -92,24 +92,24 @@ public bool TryAdd<TResult>(TKey key, ResilienceStrategy<TResult> strategy)
9292
/// </summary>
9393
/// <param name="key">The key used to identify the resilience strategy.</param>
9494
/// <returns><see langword="true"/> if the strategy was removed successfully, <see langword="false"/> otherwise.</returns>
95-
public bool Remove(TKey key) => _strategies.TryRemove(key, out _);
95+
public bool RemoveStrategy(TKey key) => _strategies.TryRemove(key, out _);
9696

9797
/// <summary>
9898
/// Removes a generic resilience strategy from the registry.
9999
/// </summary>
100100
/// <typeparam name="TResult">The type of result that the resilience strategy handles.</typeparam>
101101
/// <param name="key">The key used to identify the resilience strategy.</param>
102102
/// <returns><see langword="true"/> if the strategy was removed successfully, <see langword="false"/> otherwise.</returns>
103-
public bool Remove<TResult>(TKey key) => GetGenericRegistry<TResult>().Remove(key);
103+
public bool RemoveStrategy<TResult>(TKey key) => GetGenericRegistry<TResult>().Remove(key);
104104

105105
/// <inheritdoc/>
106-
public override bool TryGet<TResult>(TKey key, [NotNullWhen(true)] out ResilienceStrategy<TResult>? strategy)
106+
public override bool TryGetStrategy<TResult>(TKey key, [NotNullWhen(true)] out ResilienceStrategy<TResult>? strategy)
107107
{
108108
return GetGenericRegistry<TResult>().TryGet(key, out strategy);
109109
}
110110

111111
/// <inheritdoc/>
112-
public override bool TryGet(TKey key, [NotNullWhen(true)] out ResilienceStrategy? strategy)
112+
public override bool TryGetStrategy(TKey key, [NotNullWhen(true)] out ResilienceStrategy? strategy)
113113
{
114114
if (_strategies.TryGetValue(key, out strategy))
115115
{
@@ -192,7 +192,7 @@ public bool TryAddBuilder<TResult>(TKey key, Action<ResilienceStrategyBuilder<TR
192192
/// <remarks>
193193
/// This method only clears the cached strategies, the registered builders are kept unchanged.
194194
/// </remarks>
195-
public void Clear() => _strategies.Clear();
195+
public void ClearStrategies() => _strategies.Clear();
196196

197197
/// <summary>
198198
/// Clears all cached generic strategies.
@@ -201,7 +201,7 @@ public bool TryAddBuilder<TResult>(TKey key, Action<ResilienceStrategyBuilder<TR
201201
/// <remarks>
202202
/// This method only clears the cached strategies, the registered builders are kept unchanged.
203203
/// </remarks>
204-
public void Clear<TResult>() => GetGenericRegistry<TResult>().Clear();
204+
public void ClearStrategies<TResult>() => GetGenericRegistry<TResult>().Clear();
205205

206206
private static ResilienceStrategy CreateStrategy<TBuilder>(
207207
Func<TBuilder> activator,

src/Polly.Core/ResilienceStrategyBuilderBase.cs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,7 @@ private protected ResilienceStrategyBuilderBase(ResilienceStrategyBuilderBase ot
7272

7373
internal abstract bool IsGenericBuilder { get; }
7474

75-
/// <summary>
76-
/// Adds a strategy to the builder.
77-
/// </summary>
78-
/// <param name="factory">The factory that creates a resilience strategy.</param>
79-
/// <param name="options">The options associated with the strategy. If none are provided the default instance of <see cref="ResilienceStrategyOptions"/> is created.</param>
80-
/// <exception cref="ArgumentNullException">Thrown when <paramref name="factory"/> is null.</exception>
81-
/// <exception cref="InvalidOperationException">Thrown when this builder was already used to create a strategy. The builder cannot be modified after it has been used.</exception>
82-
/// <exception cref="ValidationException">Thrown when the <paramref name="options"/> are invalid.</exception>
83-
public void AddStrategy(Func<ResilienceStrategyBuilderContext, ResilienceStrategy> factory, ResilienceStrategyOptions options)
75+
internal void AddStrategyCore(Func<ResilienceStrategyBuilderContext, ResilienceStrategy> factory, ResilienceStrategyOptions options)
8476
{
8577
Guard.NotNull(factory);
8678
Guard.NotNull(options);

src/Polly.Core/ResilienceStrategyBuilderExtensions.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
using System.ComponentModel.DataAnnotations;
2+
13
namespace Polly;
24

35
/// <summary>
@@ -20,7 +22,28 @@ public static TBuilder AddStrategy<TBuilder>(this TBuilder builder, ResilienceSt
2022
Guard.NotNull(builder);
2123
Guard.NotNull(strategy);
2224

23-
builder.AddStrategy(_ => strategy, EmptyOptions.Instance);
25+
return builder.AddStrategy(_ => strategy, EmptyOptions.Instance);
26+
}
27+
28+
/// <summary>
29+
/// Adds a strategy to the builder.
30+
/// </summary>
31+
/// <typeparam name="TBuilder">The builder type.</typeparam>
32+
/// <param name="builder">The builder instance.</param>
33+
/// <param name="factory">The factory that creates a resilience strategy.</param>
34+
/// <param name="options">The options associated with the strategy. If none are provided the default instance of <see cref="ResilienceStrategyOptions"/> is created.</param>
35+
/// <returns>The same builder instance.</returns>
36+
/// <exception cref="ArgumentNullException">Thrown when <paramref name="builder"/>, <paramref name="factory"/> or <paramref name="options"/> is <see langword="null"/>.</exception>
37+
/// <exception cref="InvalidOperationException">Thrown when this builder was already used to create a strategy. The builder cannot be modified after it has been used.</exception>
38+
/// <exception cref="ValidationException">Thrown when <paramref name="options"/> is invalid.</exception>
39+
public static TBuilder AddStrategy<TBuilder>(this TBuilder builder, Func<ResilienceStrategyBuilderContext, ResilienceStrategy> factory, ResilienceStrategyOptions options)
40+
where TBuilder : ResilienceStrategyBuilderBase
41+
{
42+
Guard.NotNull(builder);
43+
Guard.NotNull(factory);
44+
Guard.NotNull(options);
45+
46+
builder.AddStrategyCore(factory, options);
2447
return builder;
2548
}
2649

0 commit comments

Comments
 (0)