public void NextFrame() { var eventQueue = new EventQueue(); var scheduler = new EventCoroutineScheduler(eventQueue); var coroutine = new NextFrameCoroutine(); Assert.Equal(CoroutineStatus.WaitingForStart, coroutine.Status); scheduler.Execute(coroutine); Assert.Equal(CoroutineStatus.Running, coroutine.Status); // Start event Assert.Equal(1, eventQueue.Count); scheduler.Update(eventQueue.DequeueEvent()); Assert.Equal(0, eventQueue.CountCurrentFrame); Assert.Equal(1, eventQueue.Count); scheduler.NewFrame(0.1f); eventQueue.NewFrame(); scheduler.Update(eventQueue.DequeueEvent()); Assert.Equal(CoroutineStatus.CompletedNormal, coroutine.Status); }
/// <summary> /// Hosted service execute method /// </summary> /// <param name="stoppingToken"></param> /// <returns></returns> protected override async Task ExecuteAsync(CancellationToken stoppingToken) { await Task.Run(async() => { while (!stoppingToken.IsCancellationRequested) { if (!await _backgroundEventQueue.HasEvents(stoppingToken)) { continue; } QueuedEventWrapperBase job = await _backgroundEventQueue.DequeueEvent(stoppingToken); try { await job.Handle(stoppingToken); } catch (AggregateException ex) { await _exceptionHandler.Handle(ex, job.EventName); } } }, stoppingToken); }