public override async Task ExecuteAsync(SourceNextDelegate <Signal> next, CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { var nextOccurrence = _cron.GetNextOccurrence(DateTime.UtcNow); var timeUntilNextOccurrence = nextOccurrence - DateTime.UtcNow; var waitUntilNextOccurrenceTask = Task.Delay(timeUntilNextOccurrence, cancellationToken); _logger.Waiting(timeUntilNextOccurrence); await waitUntilNextOccurrenceTask; await next(Signal.Static); } }
public sealed override async Task ExecuteAsync(SourceNextDelegate <T> next, CancellationToken cancellationToken) { var completion = new TaskCompletionSource(); await using var cancellationRegistration = cancellationToken.Register(o => { if (o is TaskCompletionSource tcs) { tcs.SetResult(); } }, completion); _router.AddRoute(ChainName, async httpContext => { var request = httpContext.Request; if (!await Authorize(request)) { httpContext.Response.StatusCode = StatusCodes.Status401Unauthorized; return; } var payload = await DeserializePayload(request); if (payload is null) { httpContext.Response.StatusCode = StatusCodes.Status400BadRequest; return; } if (!await ValidatePayload(request, payload)) { httpContext.Response.StatusCode = StatusCodes.Status422UnprocessableEntity; return; } httpContext.Response.StatusCode = StatusCodes.Status202Accepted; var _ = next(payload); }); await completion.Task; _router.RemoveRoute(ChainName); }
public override async Task ExecuteAsync(SourceNextDelegate <Signal> next, CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { var nextOccurrence = _cron.GetNextOccurrence(DateTime.UtcNow); _logger.Waiting(nextOccurrence - DateTime.UtcNow); // Task.Delay is unreliable, ensure we wait until next occurrence do { var delay = nextOccurrence - DateTime.UtcNow; var millisecondsDelay = (int)Math.Ceiling(delay.TotalMilliseconds); if (millisecondsDelay > 0) { await Task.Delay(millisecondsDelay, cancellationToken); } } while (DateTime.UtcNow < nextOccurrence); await next(Signal.Static); } }
public override Task ExecuteAsync(SourceNextDelegate <string> next, CancellationToken cancellationToken) { return(next(DateTime.Now.ToString(CultureInfo.InvariantCulture))); }
public abstract Task ExecuteAsync(SourceNextDelegate <TOutput> next, CancellationToken cancellationToken);
public override Task ExecuteAsync(SourceNextDelegate <T> next, CancellationToken cancellationToken) { throw new TestException(); }
public override async Task ExecuteAsync(SourceNextDelegate <Signal> next, CancellationToken cancellationToken) { await next(Signal.Static); }
public override Task ExecuteAsync(SourceNextDelegate <Signal> next, CancellationToken cancellationToken) { return(next(Signal.Static)); }
public override async Task ExecuteAsync(SourceNextDelegate <Signal> next, CancellationToken cancellationToken) { await Task.Delay(Timeout.Infinite, cancellationToken); await base.ExecuteAsync(next, cancellationToken); }