Skip to content

Commit e8c33db

Browse files
authored
Drop unnecessary allocation in circuit breaker (#1464)
1 parent 5ad71b7 commit e8c33db

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

bench/BenchmarkDotNet.Artifacts/results/Polly.Core.Benchmarks.MultipleStrategiesBenchmark-report-github.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ LaunchCount=2 WarmupCount=10
1111
```
1212
| Method | Mean | Error | StdDev | Ratio | RatioSD | Gen0 | Allocated | Alloc Ratio |
1313
|----------------------------------------------- |---------:|----------:|----------:|------:|--------:|-------:|----------:|------------:|
14-
| ExecuteStrategyPipeline_Generic_V7 | 2.318 μs | 0.0253 μs | 0.0355 μs | 1.00 | 0.00 | 0.1106 | 2824 B | 1.00 |
15-
| ExecuteStrategyPipeline_Generic_V8 | 2.044 μs | 0.0095 μs | 0.0140 μs | 0.88 | 0.02 | - | 72 B | 0.03 |
16-
| ExecuteStrategyPipeline_GenericTelemetry_V8 | 2.950 μs | 0.0059 μs | 0.0089 μs | 1.27 | 0.02 | - | 72 B | 0.03 |
17-
| ExecuteStrategyPipeline_NonGeneric_V8 | 2.295 μs | 0.0176 μs | 0.0264 μs | 0.99 | 0.01 | - | 72 B | 0.03 |
18-
| ExecuteStrategyPipeline_NonGenericTelemetry_V8 | 3.153 μs | 0.0058 μs | 0.0085 μs | 1.36 | 0.02 | - | 72 B | 0.03 |
14+
| ExecuteStrategyPipeline_Generic_V7 | 2.523 μs | 0.0207 μs | 0.0303 μs | 1.00 | 0.00 | 0.1106 | 2824 B | 1.00 |
15+
| ExecuteStrategyPipeline_Generic_V8 | 1.997 μs | 0.0079 μs | 0.0110 μs | 0.79 | 0.01 | - | 40 B | 0.01 |
16+
| ExecuteStrategyPipeline_GenericTelemetry_V8 | 2.909 μs | 0.0111 μs | 0.0166 μs | 1.15 | 0.01 | - | 40 B | 0.01 |
17+
| ExecuteStrategyPipeline_NonGeneric_V8 | 2.286 μs | 0.0101 μs | 0.0152 μs | 0.91 | 0.01 | - | 40 B | 0.01 |
18+
| ExecuteStrategyPipeline_NonGenericTelemetry_V8 | 3.223 μs | 0.0146 μs | 0.0215 μs | 1.28 | 0.02 | - | 40 B | 0.01 |

src/Polly.Core/CircuitBreaker/Controller/CircuitStateController.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public ValueTask CloseCircuitAsync(ResilienceContext context)
142142

143143
if (isHalfOpen && _onHalfOpen is not null)
144144
{
145-
_executor.ScheduleTask(() => _onHalfOpen(new OnCircuitHalfOpenedArguments(context)).AsTask(), context, out task);
145+
task = ScheduleHalfOpenTask(context);
146146
}
147147
}
148148

@@ -327,5 +327,11 @@ private void OpenCircuitFor_NeedsLock(Outcome<T> outcome, TimeSpan breakDuration
327327
_executor.ScheduleTask(() => _onOpened(args).AsTask(), context, out scheduledTask);
328328
}
329329
}
330+
331+
private Task ScheduleHalfOpenTask(ResilienceContext context)
332+
{
333+
_executor.ScheduleTask(() => _onHalfOpen!(new OnCircuitHalfOpenedArguments(context)).AsTask(), context, out var task);
334+
return task;
335+
}
330336
}
331337

0 commit comments

Comments
 (0)