public CourseSecGAOperators(GaTask task)
        {
            _dbContext = new DatabaseContext();
            _task = task;
            //relationDict = new Dictionary<KeyValuePair<ObjectId, ObjectId>, Relation.RelationType>();
            _relationsCache = new Cache<KeyValuePair<ObjectId, ObjectId>, Relation.RelationType?>();

            //currentLOsSetKnowledges = new HashSet<Knowledge>();

            //foreach (var sourceLearningObject in _task.SourceLearningObjects)
            //{
            //    foreach (var prerequisite in sourceLearningObject.Prerequisites)
            //    {
            //        var knowledge = dbContext.Ontology.Find(x => x.Id == prerequisite.KnowledgeId).SingleOrDefaultAsync().Result;
            //        currentLOsSetKnowledges.Add(knowledge);
            //    }

            //    foreach (var outcome in sourceLearningObject.Outcomes)
            //    {
            //        var knowledge = dbContext.Ontology.Find(x => x.Id == outcome.KnowledgeId).SingleOrDefaultAsync().Result;
            //        currentLOsSetKnowledges.Add(knowledge);
            //    }
            //}
        }
        public async Task<ObjectId> TaskRunAsync(GaTask gaTask)
        {
            BackgroundWorker bw = new BackgroundWorker
            {
                WorkerSupportsCancellation = true,
                WorkerReportsProgress = true
            };

            bw.DoWork += bw_DoWork;
            bw.ProgressChanged += bw_ProgressChanged;
            bw.RunWorkerCompleted += bw_RunWorkerCompleted;

            DatabaseContext dbContext = new DatabaseContext();
            gaTask.LaunchTime = DateTime.Now;
            gaTask.State = TaskState.Launched;
            await dbContext.gaTasks.InsertOneAsync(gaTask);

            bw.RunWorkerAsync(gaTask);
            //Console.WriteLine("Task " + gaTask.Id + " launched");
            Workers.Add(gaTask.Id, bw);
            return gaTask.Id;
        }