- Make ISyncPolicy public
- (Upgrade solution to msbuild15)
- Fix ExecuteAndCapture() usage with PolicyWrap
- Allow Fallback delegates to take execution Context
- Provide IReadOnlyPolicyRegistry interface
- Add PolicyRegistry for storing and retrieving policies.
- Add interfaces by policy type and execution type.
- Change .NetStandard minimum support to NetStandard1.1.
- Allow different parts of a policy execution to exchange data via a mutable Context travelling with each execution.
- Update NETStandard.Library dependency to latest 1.6.1 for .NetStandard1.0 target. Resolves compatibility for some Xamarin targets.
- Bug fix: Prevent request stampede during half-open state of CircuitBreaker and AdvancedCircuitBreaker. Enforce only one new trial call per break duration, during half-open state.
- Bug fix: Prevent duplicate raising of the onBreak delegate, if executions started when a circuit was closed, return faults when a circuit has already opened.
- Optimisation: Optimise hotpaths for Circuit-Breaker, Retry and Fallback policies.
- Minor behavioural change: For a circuit which has not handled any faults since initialisation or last reset, make
LastException
property return null rather than a fake exception. - Add NoOpPolicy: NoOpPolicy executes delegates without intervention; for eg stubbing out Polly in unit testing.
- Fix Microsoft.Bcl and Nito.AsyncEx dependencies for Polly.Net40Async.
- Refine implementation of cancellable synchronous WaitAndRetry
- Minor breaking change: Where a user delegate does not observe cancellation, Polly will now honour the delegate's outcome rather than throw for the unobserved cancellation (issue 188).
- .NETStandard1.0 target: Correctly state dependencies.
- .NETStandard1.0 target: Fix SemVer stamping of Polly.dll.
- PCL259 project and target: Remove, in favour of .NETStandard1.0 target. PCL259 is supported via .NETStandard1.0 target, going forward.
- Mark Polly.dll as CLSCompliant.
- Tidy build around GitVersionTask and ReferenceGenerator.
- Update FluentAssertions dependency.
- Added Polly.Net40Async specs project.
- Fix issue 179: Make Net4.0 async implementation for Bulkhead truly async.
- Add .NET Standard 1.0 project and target.
A major release, adding significant new resilience policies:
- Timeout policy: allows timing out any execution. Thanks to @reisenberger.
- Bulkhead isolation policy: limits the resources consumable by governed actions, such that a faulting channel cannot cause cascading failures. Thanks to @reisenberger and contributions from @brunolauze.
- Fallback policy: provides for a fallback execution or value, in case of overall failure. Thanks to @reisenberger
- PolicyWrap: allows flexibly combining Policy instances of any type, to form an overall resilience strategy. Thanks to @reisenberger
Other changes include:
- Add PolicyKeys and context to all policy executions, for logging and to support later introduction of policy events and metrics. Thanks to @reisenberger
- Add CancellationToken support to synchronous executions. Thanks to @brunolauze and @reisenberger
- Add some missing ExecuteAndCapture/Async overloads. Thanks to @reisenberger
- Remove invalid ExecuteAsync overloads taking (but not making use of) a CancellationToken
- Provide .NET4.0 support uniquely through Polly.NET40Async package
- Retire ContextualPolicy (not part of documented API; support now in Policy base class)
- Discontinue .NET3.5 support
- Added ability for policies to handle returned results. Optimised circuit-breaker hot path. Fixed circuit-breaker threshold bug. Thanks to @reisenberger, @christopherbahr and @Finity respectively.
- Added overloads to WaitAndRetry and WaitAndRetryAsync methods that accept an onRetry delegate which includes the attempt count. Thanks to @SteveCote
- Updated the Polly.Net40Async NuGet package to enable async via the SUPPORTSASYNC constant. Cleaned up the build scripts in order to ensure unnecessary DLL references are not included within each of the framework targets. Thanks to @reisenberger and @joelhulen
- Add new Polly.Net40Async project/package supporting async for .NET40 via Microsoft.Bcl.Async. Thanks to @Lumirris
- Allowed async onRetry delegates to async retry policies. Thanks to @reisenberger
- Add AdvancedCircuitBreaker. Thanks to @reisenberger and @kristianhald
- Fixed an issue with the onReset delegate of the CircuitBreaker.
- Add ExecuteAndCapture support with arbitrary context data - Thanks to @reisenberger
- Add Wait and retry forever policy - Thanks to @nedstoyanov
- Remove time-limit on CircuitBreaker state-change delegates - Thanks to @reisenberger
- Add async support and circuit-breaker support for ContextualPolicy
- Add manual control of circuit-breaker (reset and manual circuit isolation)
- Add public reporting of circuit-breaker state, for health/performance monitoring
- Add delegates on changes of circuit state
- Thanks to @reisenberger
- Add cancellation support for all async Policy execution - Thanks to @reisenberger
- Fixes an issue where continueOnCapturedContext needed to be specified in two places (on action execution and Policy configuration), when wanting to flow async action execution on the captured context - Thanks to @reisenberger
- Fixes excess line ending issues
- Async sleep fix, plus added continueOnCapturedContext parameter on async methods to control whether continuation and retry will run on captured synchronization context - Thanks to @yevhen
- Policies with a retry count of zero are now allowed - Thanks to @nelsonghezzi
- Add .NET Core support
- Fix PCL implementation of
SystemClock.Reset
- Added ability to capture the results of executing a policy via
ExecuteAndCapture
- Thanks to @ThomasMentzel
- Added extra
NotOnCapturedContext
call to prevent potential deadlocks when blocking on asynchronous calls - Thanks to Hacko
- Replaced non-blocking sleep implementation with a blocking one for PCL
- Added Async Support (PCL)
- PCL Profile updated from Profile78 -> Profile 259
- Added missing WaitAndRetryAsync overload
- Added Async Support (.NET Framework 4.5 Only) - Massive thanks to @mauricedb for the implementation
- Added Portable Class Library (Issue #4) - Thanks to @ghuntley for the implementation
- The
Polly
NuGet package is now no longer strongly named. The strongly named NuGet package is nowPolly-Signed
(Issue #5)
- Added additional overloads to Retry
- Allow arbitrary data to be passed to policy execution (Issue #1)