示例#1
0
        bool ExecuteFirstTaskStep(IPausableTask task)
        {
            if (task == null)
            {
                return(false);
            }

            //if the runner is not ready to run new tasks, it
            //cannot run immediatly but it must be saved
            //in the newTaskRoutines to be executed once possible
            if (isStopping == true)
            {
                return(true);
            }

#if TASKS_PROFILER_ENABLED
            return(Svelto.Tasks.Profiler.TaskProfiler.MonitorUpdateDuration(task, _info.runnerName));
#else
#if PROFILER
            UnityEngine.Profiling.Profiler.BeginSample(_info.runnerName.FastConcat("+", task.ToString()));
#endif
            var value = task.MoveNext();
#if PROFILER
            UnityEngine.Profiling.Profiler.EndSample();
#endif
            return(value);
#endif
        }
示例#2
0
 public void StartCoroutine(IPausableTask task)
 {
     while (task.MoveNext() == true)
     {
         ThreadUtility.Yield();
     }
 }
示例#3
0
        public void StartCoroutine(IPausableTask task)
        {
            paused = false;

            _runnerData._newTaskRoutines.Enqueue(task);
            _runnerData.UnlockThread();
        }
        public override void StartCoroutine(IPausableTask task)
        {
            paused = false;

            _newTaskRoutines.Enqueue(task);
            _flushingOperation.immediate = true;
            _processEnumerator.MoveNext();
            _flushingOperation.immediate = false;
        }
示例#5
0
        public virtual void StartCoroutine(IPausableTask task)
        {
            paused = false;

            if (ExecuteFirstTaskStep(task) == true)
            {
                newTaskRoutines.Enqueue(task); //careful this could run on another thread!
            }
        }
 public HandItToUnity(object current,
                      IPausableTask task,
                      Action <IPausableTask> resumeOperation,
                      FlushingOperation flush)
 {
     _current           = current;
     _task              = task;
     _resumeOperation   = resumeOperation;
     _isDone            = false;
     _flushingOperation = flush;
 }
示例#7
0
        public virtual void StartCoroutineThreadSafe(IPausableTask task)
        {
            paused = false;

            if (task == null)
            {
                return;
            }

            newTaskRoutines.Enqueue(task); //careful this could run on another thread!
        }
示例#8
0
        public void StartCoroutine(IPausableTask task)
        {
            if (_runnerData == null)
            {
                throw new MultiThreadRunnerException("Trying to start a task on a killed runner");
            }

            paused = false;

            _runnerData._newTaskRoutines.Enqueue(task);
            _runnerData.UnlockThread();
        }
示例#9
0
        public void StartCoroutine(IPausableTask task)
        {
            paused = false;

            _newTaskRoutines.Enqueue(task);

            MemoryBarrier();
            if (_isAlive == false)
            {
                _isAlive = true;

                UnlockThread();
            }
        }
示例#10
0
        public override void StartCoroutine(IPausableTask task)
        {
            paused = false;

            if (ExecuteFirstTaskStep(task) == true)
            {
                if (task.Current is YieldInstruction == false)
                {
                    _newTaskRoutines.Enqueue(task);
                }
                else
                {
                    _runnerBehaviourForUnityCoroutine.StartCoroutine(SupportYieldInstruction(task));
                }
            }
        }
示例#11
0
        public void StartCoroutine(IPausableTask task)
        {
            var quickIterations = 0;

            while (task.MoveNext())
            {
                if (++quickIterations < 1000)
                {
                    ThreadUtility.Yield();
                }
                else
                {
                    ThreadUtility.TakeItEasy();
                }
            }
        }
示例#12
0
        public void StartCoroutine(IPausableTask task)
        {
#if !NETFX_CORE
            if (_sleepInBetween)
            {
                while (task.MoveNext() == true)
                {
                    System.Threading.Thread.Sleep(1);
                }
            }
            else
#endif
            while (task.MoveNext() == true)
            {
                ;
            }
        }
示例#13
0
        bool ExecuteFirstTaskStep(IPausableTask task)
        {
            if (task == null)
            {
                return(false);
            }

            //if the runner is not ready to run new tasks, it
            //cannot run immediatly but it must be saved
            //in the newTaskRoutines to be executed once possible
            if (isStopping == true)
            {
                return(true);
            }

#if TASKS_PROFILER_ENABLED && UNITY_EDITOR
            return(UnityCoroutineRunner.TASK_PROFILER.MonitorUpdateDuration(task, info.runnerName));
#else
            return(task.MoveNext());
#endif
        }
示例#14
0
        IEnumerator SupportYieldInstruction(IPausableTask task)
        {
            yield return(task.Current);

            _newTaskRoutines.Enqueue(task);
        }
示例#15
0
 public void StartCoroutine(IPausableTask task)
 {
     task.Complete();
 }
        public override void StartCoroutine(IPausableTask task)
        {
            paused = false;

            newTaskRoutines.Enqueue(task); //careful this could run on another thread!
        }
示例#17
0
 public void StartCoroutineThreadSafe(IPausableTask task)
 {
     StartCoroutine(task);
 }