Пример #1
0
    //更新所有
    public static void UpdateAll(int time)
    {
        if (time < _time)
        {
            return;
        }
        _time   = time;
        _last_u = null;
        _last_t = null;
        _cur_u  = null;
        _cur_t  = null;

        var Array = _global_run_list.ToArray();

        for (int i = 0; i < Array.Length; ++i)
        {
            var _curTask = Array[i];
            if (_curTask == null)
            {
                _global_run_list.Remove(_curTask);
                continue;
            }

            try
            {
                _curTask.Update();
            }
            catch (System.Exception err)
            {
                Log.Error($"Mytask.UpdateAll,task:{_curTask.name} error:{err.Message},{err.StackTrace}");
            }
        }
    }
Пример #2
0
    void _Interrupt(CanInterruptHandler handler)
    {
        var count = _stack.Count;

        if (count == 0)
        {
            return;
        }

        // 查找 n, 使得 [0, n) 之间的 TaskUnit 可以被停止
        int n = 0;

        for (n = 0; n < count; n++)
        {
            var u             = _stack[n];
            var can_interrupt = handler(u.data);
            if (!can_interrupt)
            {
                break;
            }
        }

        // 删除 [0, n) 之间的 TaskUnit
        if (n > 0)
        {
            TaskUnit[] arr = new TaskUnit[n];
            _stack.CopyTo(0, arr, 0, n);
            _stack.RemoveRange(0, n);
            foreach (var u in arr)
            {
                u.InvokeLeave();
            }
        }
    }
        public async Task <TaskUnit> SaveTaskUnitAsync(TaskUnit taskUnit)
        {
            _context.Tasks.Add(taskUnit);
            await _context.SaveChangesAsync();

            return(taskUnit);
        }
        public async Task UpdateAsync(TaskUnit taskUnit)
        {
            var target = dbContext.TaskUnits.Single(x => x.TaskUnitId == taskUnit.TaskUnitId);

            target = taskUnit;
            await dbContext.SaveChangesAsync();
        }
Пример #5
0
        public async Task EditTaskUnitAsync(TaskUnitDTO editTaskUnit)
        {
            TaskUnit taskUnit = _mapper.Map <TaskUnitDTO, TaskUnit>(editTaskUnit);
            await _assignedUserTaskUnitService.DeleteAllAssignedUsersForTaskUnit(taskUnit.TaskUnitId);

            TaskUnit taskUnitInDb = await _taskUnitRepository.GetTaskUnitByIdAsync(taskUnit.TaskUnitId);

            var assignedUsers = editTaskUnit.AssignedUsers;

            if (assignedUsers != null)
            {
                for (int i = 0; i < assignedUsers.Count(); i++)
                {
                    int          assignedUserId = Int32.Parse(assignedUsers.ElementAt(i));
                    AssignedUser assignedUser   = await _assignedUserService.GetAssignedUserByIdAsync(assignedUserId);

                    AssignedUserTaskUnit assignedUserTaskUnit = new AssignedUserTaskUnit
                    {
                        AssignedUserId = assignedUser.AssignedUserId,
                        TaskUnitId     = taskUnitInDb.TaskUnitId
                    };
                    await _assignedUserTaskUnitService.AddAssignedUserTaskUnit(assignedUserTaskUnit);
                }
            }

            await _taskUnitRepository.EditTaskUnitAsync(taskUnit);
        }
Пример #6
0
        public async Task <TaskUnitDTO> SaveTaskUnitAsync(TaskUnitDTO taskUnitDto)
        {
            TaskUnit taskUnit = _mapper.Map <TaskUnitDTO, TaskUnit>(taskUnitDto);

            TaskUnitDTO taskUnitD = _mapper.Map <TaskUnit, TaskUnitDTO>(await _taskUnitRepository.SaveTaskUnitAsync(taskUnit));

            var assignedUsers = taskUnitDto.AssignedUsers;

            if (assignedUsers != null)
            {
                for (int i = 0; i < assignedUsers.Count(); i++)
                {
                    int          assignedUserId = Int32.Parse(assignedUsers.ElementAt(i));
                    AssignedUser assignedUser   = await _assignedUserService.GetAssignedUserByIdAsync(assignedUserId);

                    AssignedUserTaskUnit assignedUserTaskUnit = new AssignedUserTaskUnit
                    {
                        AssignedUser = assignedUser,
                        TaskUnit     = taskUnit
                    };
                    await _assignedUserTaskUnitService.AddAssignedUserTaskUnit(assignedUserTaskUnit);
                }
            }
            return(taskUnitDto);
        }
Пример #7
0
    // 调用一个指函数 e, 等它结束后再返回自己
    // 注意: 一定要用 yield return Task.Call 方式调用, 否则执行结果不可预测
    public static int Call(IEnumerator e)
    {
        if (++_calls > 1000)
        {
            throw new Exception("检测到死循环!");
        }

        var stack = _cur_t._stack;

        // 清空返回值
        if (stack.Count > 0)
        {
            var u = stack[0];
            u.ret_msg = null;
            u.ret_val = null;
        }

        // 添加任务
        {
            var u = new TaskUnit()
            {
                e = e
            };
            stack.Insert(0, u);     // 添加到头部
        }

        // 执行一次
        _cur_t.Update();

        --_calls;
        return(0);
    }
        public async Task <TaskUnit> CreateAsync(TaskUnit newTaskUnit)
        {
            await dbContext.TaskUnits.AddAsync(newTaskUnit);

            await dbContext.SaveChangesAsync();

            return(newTaskUnit);
        }
Пример #9
0
        public async Task <bool> PutTest(TaskUnit taskUnit)
        {
            var userId = await userService.GetUserIdAsync(User.Identity.Name);

            var a = await taskUnitService.UpdateOneFieldAsync
                        (x => x.TaskUnitId == taskUnit.TaskUnitId && x.UserId == userId, y => y.UserMemoText = "aaaaa");

            return(true);
        }
Пример #10
0
    /// <summary>
    /// 调用一个指定函数,等它结束后再返回执行自己
    /// 注意:一定要使用yield return Task.Call,否则结果不可预测
    /// </summary>
    /// <param name="e"></param>
    /// <returns></returns>
    public static int Call(IEnumerator e)
    {
        var u = new TaskUnit()
        {
            e = e
        };

        _cur_t._stack.Insert(0, u);
        _cur_t.Update();
        return(0);
    }
Пример #11
0
 //取消
 private void btnCancel_Click(object sender, EventArgs e)
 {
     if (_TaskUnit.TaskConfig.ExtractionRules == null ||
         _TaskUnit.TaskConfig.ExtractionRules.Count == 0 ||
         _TaskUnit.TaskConfig.UrlListManager.NavigationRules == null ||
         _TaskUnit.TaskConfig.UrlListManager.NavigationRules.Count == 0)
     {
         _TaskUnit = null;
     }
     this.Close();
     this.Dispose();
 }
Пример #12
0
 //добавление задачи в очередь
 private void EnqueueTask(Task task, Priority priority)
 {
     lock (threadQueueLock)
     {
         TaskUnit taskUnit = new TaskUnit(task, priority);
         taskQueue.Add(taskUnit);
         Console.WriteLine("добавлена задача приоритета: " + priority);
     }
     lock (threadTaskLock)
     {
         Monitor.Pulse(threadTaskLock);
     }
 }
Пример #13
0
        private void btnScan_Click(object sender, RoutedEventArgs e)
        {
            TaskUnit api = new TaskUnit(tbHost.Text.Trim(), uint.Parse(tbPort.Text.Trim()));

            api.NewTask(tbTaskUrl.Text.Trim());
            api.StartGetDBTableColumnCount();
            while (!api.CheckTaskFinied())
            {
                Thread.Sleep(1000);
            }
            var data       = api.GetTaskData();
            var targetInfo = api.ReadAllFromTaskData(data);

            tbResult.Text = Newtonsoft.Json.JsonConvert.SerializeObject(data, Newtonsoft.Json.Formatting.Indented);
        }
Пример #14
0
        private void ThreadAction()
        {
            Console.WriteLine("ThreadAction. Go.");
            lock (threadTaskLock)
            {
                while (true)
                {
                    Monitor.Wait(threadTaskLock);
                    lock (threadQueueLock)
                    {
                        if (!taskQueue.Any())
                        {
                            lock (threadStoperLock)
                            {
                                if (IsStopped)
                                {
                                    poolStoppedGate.Set();
                                    return;
                                }
                            }
                            Console.WriteLine("Задач нет. Ждем новых");
                            continue;
                        }
                    }


                    TaskUnit newTask = DequeueTask();

                    newTask.Task.Execute();
                    Console.WriteLine("Выполнена задача приоритета: " + newTask.Priority, ConsoleColor.Blue);

                    lock (threadQueueLock)
                    {
                        lock (threadStoperLock)
                        {
                            if (IsStopped &&
                                !taskQueue.Any())
                            {
                                Console.WriteLine("Нет задач в очереди. Выход из потока.");
                                // Сигнализировать об окончании выполнения последней задачи.
                                poolStoppedGate.Set();
                                return;
                            }
                        }
                    }
                }
            }
        }
Пример #15
0
        //private List<Replacement> _Replacement = new List<Replacement>();
        //private List<HtmlMark> _htmlMakes = new List<HtmlMark>();
        #endregion

        public FrmTask(TaskUnit taskUnit) {
            InitializeComponent();
            SerializerHtmlMaker();

            this._TaskUnit = taskUnit;

            //保存任务配置信息
            //taskUnit.SaveTaskConfiguration(@"c:\01.xml");

            //初始化UI
            this.SetUnitToUI();

            //初始化编码
            this.FullEncodingList();

            this.Refresh();
        }
Пример #16
0
 // 全局更新
 public static void UpdateAll(int time)
 {
     if (time < _time)
     {
         return;                 // 必须 >=0
     }
     _time   = time;
     _cur_t  = null;
     _cur_u  = null;
     _calls  = 0;
     _last_t = null;
     _last_u = null;
     foreach (var t in _global_run_list.Array)
     {
         t.Update();
     }
 }
Пример #17
0
        //private List<Replacement> _Replacement = new List<Replacement>();
        //private List<HtmlMark> _htmlMakes = new List<HtmlMark>();
        #endregion

        public FrmTask(TaskUnit taskUnit)
        {
            InitializeComponent();
            SerializerHtmlMaker();

            this._TaskUnit = taskUnit;

            //保存任务配置信息
            //taskUnit.SaveTaskConfiguration(@"c:\01.xml");

            //初始化UI
            this.SetUnitToUI();

            //初始化编码
            this.FullEncodingList();

            this.Refresh();
        }
 public async Task EditTaskUnitAsync(TaskUnit taskUnit)
 {
     _context.Tasks.Update(taskUnit);
     await _context.SaveChangesAsync();
 }
 public async Task DeleteTaskUnitAsync(TaskUnit taskUnit)
 {
     _context.Tasks.Remove(taskUnit);
     await _context.SaveChangesAsync();
 }
Пример #20
0
 //取消
 private void btnCancel_Click(object sender, EventArgs e) {
     if (_TaskUnit.TaskConfig.ExtractionRules == null ||
         _TaskUnit.TaskConfig.ExtractionRules.Count == 0 ||
         _TaskUnit.TaskConfig.UrlListManager.NavigationRules == null ||
         _TaskUnit.TaskConfig.UrlListManager.NavigationRules.Count == 0)
     {
         _TaskUnit = null;
     }
     this.Close();
     this.Dispose();
 }