public bool Schedule(RequestProcessType type, string identifier, ProcessSchedulerDelegate processAsync) { var queueItem = new QueueItem(type, identifier, processAsync); // Try and enqueue item, if this fails it means we're tearing down. var enqueued = _queue.TryEnqueue(queueItem); return(enqueued); }
public void ShouldScheduleCompletedTask(RequestProcessType type) { using (IScheduler s = new ProcessScheduler(new TestLoggerFactory(_testOutputHelper))) { var done = new CountdownEvent(1); s.Start(); s.Add(type, "bogus", () => { done.Signal(); return(Task.CompletedTask); }); done.Wait(ALONGTIME_MS).Should().Be(true, because: "all tasks have to run"); } }
public void ShouldScheduleCompletedTask(RequestProcessType type) { var testScheduler = new TestScheduler(); var testObservable = testScheduler.CreateColdObservable( OnNext(100, Unit.Default), OnCompleted(100, Unit.Default) ); var testObserver = testScheduler.CreateObserver <Unit>(); using IScheduler s = new ProcessScheduler(new TestLoggerFactory(_testOutputHelper), null); s.Start(); s.Add(type, "bogus", testObservable.Do(testObserver)); testScheduler.AdvanceTo(50); testObservable.Subscriptions.Count.Should().Be(1); testScheduler.AdvanceTo(101); testObservable.Subscriptions.Count.Should().Be(1); testObserver.Messages.Should().Contain(z => z.Value.Kind == NotificationKind.OnNext); testObserver.Messages.Should().Contain(z => z.Value.Kind == NotificationKind.OnCompleted); }
public void ShouldScheduleCompletedTask(RequestProcessType type) { var testScheduler = new TestScheduler(); var testObservable = testScheduler.CreateColdObservable( OnNext(Subscribed, Unit.Default), OnCompleted(Subscribed, Unit.Default) ); var testObserver = testScheduler.CreateObserver <Unit>(); using var s = new ProcessScheduler(new TestLoggerFactory(_testOutputHelper), false, null, TimeSpan.FromSeconds(30), testScheduler); s.Add(type, "bogus", DoStuff(testObservable, testObserver)); testScheduler.AdvanceTo(Subscribed / 2); testObservable.Subscriptions.Count.Should().Be(1); testScheduler.AdvanceTo(Subscribed + 1); testObservable.Subscriptions.Count.Should().Be(1); testObserver.Messages.Should().Contain(z => z.Value.Kind == NotificationKind.OnNext); testObserver.Messages.Should().Contain(z => z.Value.Kind == NotificationKind.OnCompleted); }
private record QueueItem(RequestProcessType Type, string Identifier, ProcessSchedulerDelegate ProcessAsync);
public RequestProcessIdentifier(RequestProcessType defaultRequestProcessType = RequestProcessType.Serial) => _defaultRequestProcessType = defaultRequestProcessType;
public ProcessAttribute(RequestProcessType type) { Type = type; }
public static void Add(this IScheduler scheduler, RequestProcessType type, string name, Func <Task> request) { scheduler.Add(type, name, Observable.FromAsync(request)); }