public AsyncTaskRunner(ITaskScheduler taskScheduler, ExecutionTargetSide executionSide)
        {
            this.taskScheduler = taskScheduler;
            this.executionSide = executionSide;

            EventWaitHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
        }
Exemple #2
0
        public void RunFrameUpdate(ExecutionTargetSide target)
        {
            for (int index = 0; index < InternalTasks.Count; index++)
            {
                var task = InternalTasks[index];
                if (task.ExecutionTarget == ExecutionTargetContext.NextFrame ||
                    task.ExecutionTarget == ExecutionTargetContext.EveryFrame)
                {
                    if (target != ExecutionTargetSide.SyncFrame)
                    {
                        continue;
                    }

                    RunTask(task);
                }

                if (task.ExecutionTarget == ExecutionTargetContext.NextPhysicsUpdate ||
                    task.ExecutionTarget == ExecutionTargetContext.EveryPhysicsUpdate)
                {
                    if (target != ExecutionTargetSide.PhysicsFrame)
                    {
                        continue;
                    }

                    RunTask(task);
                }

                if (task.ExecutionTarget == ExecutionTargetContext.NextAsyncFrame ||
                    task.ExecutionTarget == ExecutionTargetContext.EveryAsyncFrame)
                {
                    if (target != ExecutionTargetSide.AsyncFrame)
                    {
                        continue;
                    }

                    RunTask(task);
                }
            }
        }