using System.Collections.Generic;
using System.Threading.Tasks;
public static async Task Main()
await KeepTrying<A>(() => [new ()], 1);
await KeepTrying<B>(() => [new ()], 1);
static ValueTask<IEnumerable<TResult>> KeepTrying<TResult>(
Func<IEnumerable<TResult>> func, int expectedInteger)
where TResult : IMyInteger
var pipeline = new ResiliencePipelineBuilder<IEnumerable<TResult>>()
ShouldHandle = new PredicateBuilder<IEnumerable<TResult>>()
.Handle<NotFoundException>()
.HandleResult(result => result.First().MyInteger != expectedInteger),
Delay = TimeSpan.FromSeconds(1),
Console.WriteLine(args.Outcome.Result);
return ValueTask.FromResult(pipeline.Execute(func));
public int MyInteger { get; }
public int MyInteger { get; } = 1;
public int MyInteger { get; } = 2;
class NotFoundException: Exception