Ejemplo n.º 1
0
        internal TaskRoutine Start(IEnumerator enumerator, CallbackDelegate onComplete)
        {
            TaskRoutine task = RetrieveTask();

            task.Start(enumerator, onComplete);
            return(task);
        }
Ejemplo n.º 2
0
        IEnumerator EnumeratorDecorator(IEnumerator enumerator, TaskRoutine task)
        {
            while (enumerator.MoveNext() == true)
                yield return enumerator.Current;

            _pool.Enqueue(task);
        }
Ejemplo n.º 3
0
        internal bool ReturnTaskToPool(TaskRoutine taskRoutine)
        {
            if (!taskRoutine.IsBusy)
            {
                _pool.Enqueue(taskRoutine);
                return(true);
            }

            return(false);
        }
Ejemplo n.º 4
0
        public async Task <ActionResult <TaskRoutine> > PostTaskRoutine(TaskRoutine taskRoutine)
        {
            if (ModelState.IsValid)
            {
                await _taskRoutineRepo.SaveTaskRoutine(taskRoutine);

                return(CreatedAtAction("GetTaskRoutine", new { id = taskRoutine.Id }, taskRoutine));
            }
            return(BadRequest("Model is not valid"));
        }
Ejemplo n.º 5
0
        void Cleanup()
        {
            finalFunc.OnDespawn();
            LeanClassPool <UAsyncFinalFunc> .Despawn(finalFunc);

            taskRoutine = null;

            func.OnDespawn();
            LeanClassPool <ChildFunc <T> > .Despawn(func);
        }
Ejemplo n.º 6
0
        void Cleanup()
        {
            finalFunc.action1 = null;
            LeanClassPool <UAsyncFinalFunc> .Despawn(finalFunc);

            taskRoutine = null;

            for (int i = 0; i < funcs.Count; i++)
            {
                funcs [i].OnDespawn();
                LeanClassPool <ChildFunc> .Despawn(funcs [i]);
            }

            funcs.Clear();
        }
Ejemplo n.º 7
0
        internal TaskRoutine RetrieveTask()
        {
            TaskRoutine task = null;

            if (_pool.Count > 0)
            {
                task = _pool.Dequeue();
            }

            if (task != null && !task.IsBusy)
            {
                return(task);
            }

            return(CreateEmptyTask());
        }
Ejemplo n.º 8
0
        public void OnRoutineCompleted(TaskRoutine taskRoutine, CallbackDelegate onComplete, object err, object res)
        {
            try {
                if (onComplete != null)
                {
                    onComplete(err, res);
                }
                else if (err != null)
                {
                    Debug.LogWarning(err);
                }
            } catch (Exception e) {
                Debug.LogException(e);  // TODO: Add global exception handler
            }

            ReturnTaskToPool(taskRoutine);
        }
Ejemplo n.º 9
0
        public async Task <IActionResult> PutTaskRoutine(int id, TaskRoutine taskRoutine)
        {
            if (id != taskRoutine.Id)
            {
                return(BadRequest());
            }
            try
            {
                await _taskRoutineRepo.SaveTaskRoutine(taskRoutine);

                return(CreatedAtAction("GetTaskRoutine", new { id = taskRoutine.Id }, taskRoutine));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex));
            }
        }
Ejemplo n.º 10
0
        void RunOneFunc(ChildFunc func)
        {
            var name = func.name;

            if (func.action2 != null)
            {
                taskRoutine =
                    TaskRunner.Instance.Run(
                        new SingleTask(
                            () => func.action2((err, res) => Callback(name, err, res), result)),
                        TaskRunnerCallback
                        );
            }
            else
            {
                taskRoutine =
                    TaskRunner.Instance.Run(
                        func.enumerator2((err, res) => Callback(name, err, res), result),
                        TaskRunnerCallback);
            }
        }
Ejemplo n.º 11
0
 void RunOneFunc()
 {
     if (func.action1 != null)
     {
         taskRoutine =
             TaskRunner.Instance.Run(
                 new SingleTask(
                     () => func.action1(items [completeNum], (err, res) => Callback(err))
                     ),
                 TaskRunnerCallback
                 );
     }
     else
     {
         taskRoutine = TaskRunner.Instance.Run(
             func.enumerator1(
                 items [completeNum],
                 (err, res) => Callback(err)),
             TaskRunnerCallback
             );
     }
 }
Ejemplo n.º 12
0
        void InitializeThreadsAndData(uint numberOfThreads, bool tightTasks)
        {
            _runners       = new MultiThreadRunner <TaskRoutine <ParallelTaskCollection <TTask> > > [numberOfThreads];
            _taskRoutines  = new TaskRoutine <ParallelTaskCollection <TTask> > [numberOfThreads];
            _parallelTasks = new ParallelTaskCollection <TTask> [numberOfThreads];

            //prepare a single multithread runner for each group of fiber like task collections
            //number of threads can be less than the number of tasks to run
            for (int i = 0; i < numberOfThreads; i++)
            {
                _runners[i] = new MultiThreadRunner <TaskRoutine <ParallelTaskCollection <TTask> > >
                                  ("MultiThreadedParallelRunner ".FastConcat(_name, " #").FastConcat(i),
                                  false, tightTasks);
            }

            Action ptcOnOnComplete = DecrementConcurrentOperationsCounter;
            Func <Exception, bool> ptcOnOnException = (e) =>
            {
                DecrementConcurrentOperationsCounter();
                return(false);
            };


            //prepare the fiber-like paralleltasks
            for (int i = 0; i < numberOfThreads; i++)
            {
                var ptc = new ParallelTaskCollection <TTask>("MultiThreaded ParallelTaskCollection ".
                                                             FastConcat(_name, " #").FastConcat(i));

                ptc.onComplete  += ptcOnOnComplete;
                ptc.onException += ptcOnOnException;

                _parallelTasks[i] = ptc;
                var taskRoutine = ptc.ToTaskRoutine(_runners[i]);
                _taskRoutines[i] = taskRoutine;
            }
        }
Ejemplo n.º 13
0
 public void OnRoutineCanceled(TaskRoutine taskRoutine)
 {
     ReturnTaskToPool(taskRoutine);
 }