public void CompleteTask(ILoadTask task) { lock (this.tasks) { if (this.tasksInProgressDict.ContainsKey(task.Identifier)) { this.tasksInProgressDict.Remove(task.Identifier); } } }
public void FailTask(ILoadTask task) { lock (this.tasks) { if (this.tasksInProgressDict.ContainsKey(task.Identifier)) { this.tasksInProgressDict.Remove(task.Identifier); } this.tasks.Add(task); } }
public ILoadTask GetNextTask() { lock (this.tasks) { ILoadTask task = null; if (this.tasks.Any()) { task = this.tasks[0]; this.tasksInProgressDict[task.Identifier] = task; this.tasks.Remove(task); } return(task); } }
public void Add(System.Type taskType, ILoadTask task) { if (taskType == null) { throw new ArgumentNullException(nameof(taskType)); } if (task == null) { throw new ArgumentNullException(nameof(task)); } var taskQueueExists = _tasksTodo.TryGetValue(taskType, out var queueOfTasksOfType); if (!taskQueueExists) { queueOfTasksOfType = new Queue <ILoadTask>(); } queueOfTasksOfType.Enqueue(task); _tasksTodo[taskType] = queueOfTasksOfType; }
public ILoadState CreateLoadTask(string[] assetPaths, OnLoadTaskComplete onTaskComplete, int priority, ELoaderType loaderType) { ILoadTask task = GetTask(); task.AddTaskCallBack(onTaskComplete); int loaderCount = assetPaths == null ? 0 : assetPaths.Length; //set loader count first, then the task could check if completed... task.SetLoaderCount(loaderCount); if (assetPaths != null) { for (int i = 0; i < assetPaths.Length; i++) { ILoader loader = GetLoader(assetPaths[i], priority, loaderType); loader.AddTask(task); } } ILoadState state = GetState(); state.SetTask(task); return(state); }
public virtual void AddTask(ILoadTask task) { //can't de-emphasis, because a task may sign some same loaders... m_TaskList.Add(task); }
//release the refrence of the task to recycle the task... void OnTaskComplete(ILoadAsset asset) { m_Task = null; m_IsDone = true; }
public void SetTask(ILoadTask task) { m_Task = task; m_IsDone = false; m_Task.AddTaskCallBack(OnTaskComplete); }
public void Start(AlphaVantageAgent parent) { this.parent = parent; int sleepTime = 1; Stopwatch timer = Stopwatch.StartNew(); this.shutdown = false; if (this.maxDailyCalls != null && this.maxDailyCalls != 0 && this.dailyCallsLeft == 0) { this.shutdown = true; } while (!shutdown) { Console.WriteLine("Key Agent {0} getting next task", this.Key); ILoadTask task = parent.GetNextTask(); if (task != null) { Console.WriteLine("Key Agent {0} processing {1}", this.Key, task.Descriptor); this.dailyCallsLeft -= 1; timer.Reset(); timer.Start(); try { task.Run(this.Key); parent.CompleteTask(task); this.SaveUsage(); } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.InnerException.Message); parent.FailTask(task); } timer.Stop(); double maxSleepTime = 60.0 * 1000.0 / this.CallsPerMinute; sleepTime = (int)Math.Ceiling(maxSleepTime - timer.ElapsedMilliseconds); } else { Console.WriteLine("Key Agent {0} no task found, sleeping", this.Key); sleepTime = 1000; } NLog.LogManager.GetCurrentClassLogger().Debug("sleepTime = {0}", sleepTime); Console.WriteLine("Key Agent {0} sleeping for {1} seconds", this.Key, sleepTime / 1000.0); if (sleepTime < 0) { sleepTime = (int)Math.Ceiling(60.0 * 1000.0 / this.CallsPerMinute); } Thread.Sleep(sleepTime); } this.shutdown = true; Console.WriteLine("No daily calls left, terminating."); }