Пример #1
0
        public void RunProcess(Action process, PriorityClass priorityClass, string processName, bool runInThread)
        {
            process = TaskInProgress.Start(this, process, $"RunProcess[{processName}]");
            LogTileMessage($"Starting Process '{processName}'...");

            if (runInThread)
            {
                process();
            }
            else
            {
                PriorityScheduler.Schedule(process, priorityClass, Centroid);
            }
        }
Пример #2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="phase"></param>
 /// <param name="action"></param>
 /// <returns>True if the action was executed immediately</returns>
 public bool InvokeWhenCompleted(GenerationStage phase, Action <bool> action, string reason)
 {
     action = TaskInProgress.Start(this, action, $"InvokeWhenCompleted[{phase}]:{reason}");
     if (CompletedPhase >= phase && Thread.CurrentThread == VoxelGame.GameThread)
     {
         action(true);
         return(true);
     }
     else
     {
         _pendingActions[(int)phase].Enqueue(() => action(false));
         return(false);
     }
 }
Пример #3
0
            public static Action <T> Start <T>(Tile tile, Action <T> action, string name)
            {
                var task = new TaskInProgress(tile, name);

                lock (tile.tasksInProgess)
                {
                    tile.tasksInProgess.Add(task);
                }
                task.action = action;
                return(x =>
                {
                    action(x);

                    lock (tile.tasksInProgess)
                    {
                        tile.tasksInProgess.Remove(task);
                    }
                });
            }