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);
            }
        }
Exemple #4
0
        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;
        }
Exemple #5
0
        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);
        }
Exemple #6
0
 public virtual void AddTask(ILoadTask task)
 {
     //can't de-emphasis, because a task may sign some same loaders...
     m_TaskList.Add(task);
 }
Exemple #7
0
 //release the refrence of the task to recycle the task...
 void OnTaskComplete(ILoadAsset asset)
 {
     m_Task   = null;
     m_IsDone = true;
 }
Exemple #8
0
 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.");
            }