private void ScheduleTask(ComponentWrapperBase componentWrapper, int delay) { var cancellationToken = new CancellationTokenSource(); Task.Run(async delegate { await Task.Delay(TimeSpan.FromMilliseconds(delay), cancellationToken.Token); foreach (var component in componentWrapper.GetNextComponentsToRun()) { engineActor.UpdateComponent(component, RunMode.Asynchronous); } DoPostUpdateActions(componentWrapper, componentWrapper.GetNextFrameLength()); }, cancellationToken.Token); componentWrapper.Run(cancellationToken); }