Exemple #1
0
        public async Task AddTaskAsync(DispatchTask task)
        {
            if (!TaskIsInvalid(task))
            {
                if (task.Tasktype == (int)TaskType.TT_MANUTASK)
                {
                    var add = await GrainFactory.GetGrain <ITask>((long)task.Channelid).AddTaskAsync(_mapper.Map <TaskContent>(task));
                }
                else
                {
                    if ((task.Starttime - DateTime.Now).TotalSeconds >
                        taskSchedulePrevious || (task.Endtime - DateTime.Now).TotalSeconds < taskSchedulePrevious)//开始时间之前,结束时间之后,有效范围外的
                    {
                        //提交开始监听(监听会做有效时间判断)
                        await GrainFactory.GetGrain <IReminderTask>(0).AddTaskAsync(task);
                    }
                    else
                    {
                        var add = await GrainFactory.GetGrain <ITask>((long)task.Channelid).AddTaskAsync(_mapper.Map <TaskContent>(task));

                        if (!add)
                        {
                            await GrainFactory.GetGrain <IReminderTask>(0).AddTaskAsync(task);
                        }
                        else//添加结束的监听
                        {
                            task.State = (int)taskState.tsExecuting;
                            await GrainFactory.GetGrain <IReminderTask>(0).AddTaskAsync(task);
                        }
                    }
                }
            }
        }
Exemple #2
0
        public async Task DeleteTaskAsync(DispatchTask task)
        {
            if (!TaskIsInvalid(task))
            {
                await GrainFactory.GetGrain <IReminderTask>(0).DeleteTaskAsync(task.Taskid);

                await GrainFactory.GetGrain <ITask>((long)task.Channelid).StopTaskAsync(task.Taskid);
            }
        }
Exemple #3
0
 public Task <T> RegisterRequest <T>(RequestId id)
 {
     try {
         var r = new DispatchTask <T>();
         pendingRequests.Add(id, r);
         return(r.Task);
     } catch (ArgumentException) {
         throw new InvalidOperationException($"Duplicate request id '{id}'");
     }
 }
Exemple #4
0
 private bool TaskIsInvalid(DispatchTask task)
 {
     if (task != null && task.Tasktype != null &&
         task.Taskid > 0 && task.State != null && task.Endtime != null &&
         task.Starttime != null && task.Endtime > DateTime.MinValue)
     {
         if (task.Tasktype != (int)TaskType.TT_PERIODIC)
         {
             if (task.Endtime == null)
             {
                 return(true);
             }
         }
         return(false);
     }
     return(true);
 }
Exemple #5
0
        //修改或者stop
        public async Task UpdateTaskAsync(DispatchTask task)
        {
            if (!TaskIsInvalid(task))
            {
                if ((task.Starttime - DateTime.Now).TotalSeconds >
                    taskSchedulePrevious || (task.Endtime - DateTime.Now).TotalSeconds < taskSchedulePrevious)
                {
                    //提交开始监听
                    await GrainFactory.GetGrain <IReminderTask>(0).UpdateTaskAsync(task);

                    //向远修改任务,要把准备调度里面的清空
                    if ((task.Starttime - DateTime.Now).TotalMinutes > reminderTimerMinutes)
                    {
                        var membership = await GrainFactory.GetGrain <IManagementGrain>(0).GetHosts(true);

                        if (membership != null && membership.Count > 0)
                        {
                            await GrainFactory.GetGrain <IScheduleTaskGrain>(task.Taskid % membership.Count).RemoveScheduleTaskAsync(task);
                        }
                    }
                }
                else
                {
                    var add = await GrainFactory.GetGrain <ITask>((long)task.Channelid).AddTaskAsync(_mapper.Map <TaskContent>(task));

                    if (!add)
                    {
                        await GrainFactory.GetGrain <IReminderTask>(0).UpdateTaskAsync(task);
                    }
                    else//添加结束的监听
                    {
                        task.State = (int)taskState.tsExecuting;
                        await GrainFactory.GetGrain <IReminderTask>(0).UpdateTaskAsync(task);
                    }
                }
            }
        }
Exemple #6
0
        public async Task <IActionResult> Update([FromRoute] Guid id, [FromBody] DispatchTask dispatchTask, CancellationToken ct)
        {
            var updatedDispatchTask = await _DispatchTaskService.UpdateAsync(id, dispatchTask, ct);

            return(Ok(updatedDispatchTask));
        }
Exemple #7
0
        public async Task <IActionResult> CreateAndExecute([FromBody] DispatchTask dispatchTask, CancellationToken ct)
        {
            var resultList = await _DispatchTaskService.CreateAndExecuteAsync(dispatchTask, ct);

            return(Ok(resultList));
        }
Exemple #8
0
        public async Task <IActionResult> Create([FromBody] DispatchTask dispatchTask, CancellationToken ct)
        {
            var createdDispatchTask = await _DispatchTaskService.CreateAsync(dispatchTask, ct);

            return(CreatedAtAction(nameof(this.Get), new { id = createdDispatchTask.Id }, createdDispatchTask));
        }