private void Task_TinctTaskStatusChanged(object sender, TinctTaskEventArgs e)
        {
            TinctTask task = sender as TinctTask;
            //log
            var taskInfo = new TinctTaskInfo(task.Context, task.TaskStatus);
            foreach (var w in task.WaittingTinctTasks)
            {
                taskInfo.WaitTaskIDs.Add(w.ID);
            }

            logentity.Message = taskInfo;
            logger.LogInfo(logentity);
         
            switch (task.TaskStatus)
            {

                case TinctTaskStatus.Completed:
                    break;
                case TinctTaskStatus.PartCompleted:
                    break;
                case TinctTaskStatus.WaittingToRun:
                    lock (syncqueue)
                    {
                        queuetasks.Enqueue(task);
                        if (EnqueTask != null)
                        {
                            EnqueTask(this,new EventArgs());
                        }
                        break;
                    }
                case TinctTaskStatus.Faulted:
                     break;
                case TinctTaskStatus.Running:
                    break;
                case TinctTaskStatus.Waitting:
                    break;
                case TinctTaskStatus.Canceled:                  
                    break;
                case TinctTaskStatus.Exception:
                    break;
                
            }
             
            
        }
        public override void AddTinctTask(TinctTask task)
        {
            task.TinctTaskStatusChanged += Task_TinctTaskStatusChanged;


            //log
            var taskInfo = new TinctTaskInfo(task.Context, task.TaskStatus);
            foreach (var w in task.WaittingTinctTasks)
            {
                taskInfo.WaitTaskIDs.Add(w.ID);
            }

            logentity.Message = taskInfo;
            logger.LogInfo(logentity);


            lock (synctasks)
            {
                tinctTasks.Add(task);
            }
            if (task.TaskStatus == TinctTaskStatus.WaittingToRun)
            {
                lock (syncqueue)
                {
                    queuetasks.Enqueue(task);
                    if (EnqueTask != null)
                    {
                        EnqueTask(this, new EventArgs());
                    }
                }
            }
        }