Esempio n. 1
0
        public void StartTaskAsync(Task task, TaskData taskData)
        {
            SlaveTask slaveTask = null;

            slaveTasksLocker.EnterUpgradeableReadLock();
            try {
                if (slaveTasks.ContainsKey(task.Id))
                {
                    SlaveStatusInfo.IncrementTasksFailed();
                    throw new TaskAlreadyRunningException(task.Id);
                }
                else
                {
                    slaveTask = new SlaveTask(pluginManager, task.CoresNeeded, log);
                    AddSlaveTask(task, slaveTask);
                    SlaveStatusInfo.IncrementTasksFetched();
                }
            }
            finally { slaveTasksLocker.ExitUpgradeableReadLock(); }

            if (slaveTask != null)
            {
                try {
                    slaveTask.StartJobAsync(task, taskData);
                }
                catch (Exception) {
                    RemoveSlaveTask(task.Id, slaveTask); // clean up and rethrow
                    slaveTask.DisposeAppDomain();
                    throw;
                }
            }
        }