void Start() { onChangeColor = ColorChanger; onChangeColor(Color.green); onTaskEnd += Task1; onTaskEnd += Task2; onTaskEnd?.Invoke(); }
private void Run() { while (Running_) { if (!TaskQueue_.TryDequeue(out var task)) { Thread.Sleep(500); continue; } Working_ = true; $"Convert input={task.InputFile} output={task.OutputFile} type={task.Type.ToString()}".Info(); OnTaskStart.Invoke(); try { switch (task.Type) { case ConversionType.PDF: Converter.ConvertToPDF(task.InputFile, task.OutputFile); break; case ConversionType.PNG: Converter.ConvertToPNG(task.InputFile, task.OutputFile); break; } task.Promise.SetResult(true); } catch (Exception e) { e.Error("ConversionWorker", "Cannot convert due to"); task.Promise.SetResult(false); } OnTaskEnd.Invoke(); Working_ = false; } "Conversion worker is end".Info(); }
/* * public void RemoveSequentialTask(Func<IEnumerator> f) { * SequentialTasks.Remove(f); * } */ /* * public void RemoveImmediateTask(Func<IEnumerator> f) { * ImmediateTasks.Remove(f); * } */ IEnumerator RunTasks() { PC.SetPlayerInputEnabled(PlayerInputFlag.TASKMANAGER, false); /* * TaskEndFlag = new bool[ImmediateTasks.Count]; * var Tasks = new List<IClockTask>(ImmediateTasks); * Tasks.AddRange(SequentialTasks); * Tasks.OrderBy((x) => x.StartClock); * foreach (var x in Tasks) { * x.RunImmediately(); * } */ //SequentialTasks.OrderBy((x) => x.StartClock); /* * for (int i=0;i<ImmediateTasks.Count;i++) { * * StartCoroutine(RunTaskAndRaiseFlag(ImmediateTasks[i], i)); * * } * yield return new WaitUntil(() => { var result = true; foreach (var b in TaskEndFlag) { result &= b; } return result; }); */ for (int i = 0; i < UndoneTasks.Count; i++) { if (UndoneTasks[i].StartClock <= Clock) { SequentialTasks.Add(UndoneTasks[i]); UndoneTasks.RemoveAt(i); i--; } } Debug.Log("Clock : " + Clock); while (SequentialTasks.Count != 0) { SequentialTasks = SequentialTasks.OrderBy((x) => x.Priority).OrderBy((x) => x.StartClock).ToList(); var t = SequentialTasks[0]; if (t.HasIteration) { yield return(t.Run()); } else { t.Run(); } //Debug.Log("Task : " + t.ToString() + ", Priority : " + t.Priority + ", Time : " + t.StartClock + ", Frame : " + Time.frameCount + ", RealTime : " + Time.unscaledTime); SequentialTasks.Remove(t); OnTaskEnd?.Invoke(); for (int i = 0; i < UndoneTasks.Count; i++) { if (UndoneTasks[i].StartClock <= Clock) { SequentialTasks.Add(UndoneTasks[i]); UndoneTasks.RemoveAt(i); i--; } } } //ImmediateTasks.Clear(); SequentialTasks.Clear(); PC.SetPlayerInputEnabled(PlayerInputFlag.TASKMANAGER, true); }