Merge pull request #24 from guochen2/cg/fix/task_cancel

任务取消支持
pull/37/head
xuanye wong 4 years ago committed by GitHub
commit c9d382722a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      src/DotXxlJob.Core/Model/JobExecuteContext.cs
  2. 9
      src/DotXxlJob.Core/Queue/JobTaskQueue.cs
  3. 5
      src/DotXxlJob.Core/TaskExecutors/BeanTaskExecutor.cs
  4. 3
      src/DotXxlJob.Core/TaskExecutors/ITaskExecutor.cs

@ -1,13 +1,17 @@
using System.Threading;
namespace DotXxlJob.Core.Model namespace DotXxlJob.Core.Model
{ {
public class JobExecuteContext public class JobExecuteContext
{ {
public JobExecuteContext(IJobLogger jobLogger,string jobParameter) public JobExecuteContext(IJobLogger jobLogger, string jobParameter, CancellationToken cancellationToken)
{ {
this.JobLogger = jobLogger; this.JobLogger = jobLogger;
this.JobParameter = jobParameter; this.JobParameter = jobParameter;
this.cancellationToken = cancellationToken;
} }
public string JobParameter { get; } public string JobParameter { get; }
public IJobLogger JobLogger { get; } public IJobLogger JobLogger { get; }
public CancellationToken cancellationToken { get; }
} }
} }

@ -44,11 +44,11 @@ namespace DotXxlJob.Core
/// <returns></returns> /// <returns></returns>
public ReturnT Replace(TriggerParam triggerParam) public ReturnT Replace(TriggerParam triggerParam)
{ {
Stop();
while (!TASK_QUEUE.IsEmpty) while (!TASK_QUEUE.IsEmpty)
{ {
TASK_QUEUE.TryDequeue(out _); TASK_QUEUE.TryDequeue(out _);
} }
Stop();
ID_IN_QUEUE.Clear(); ID_IN_QUEUE.Clear();
return Push(triggerParam); return Push(triggerParam);
@ -81,12 +81,12 @@ namespace DotXxlJob.Core
public void Dispose() public void Dispose()
{ {
Stop();
while (!TASK_QUEUE.IsEmpty) while (!TASK_QUEUE.IsEmpty)
{ {
TASK_QUEUE.TryDequeue(out _); TASK_QUEUE.TryDequeue(out _);
} }
ID_IN_QUEUE.Clear(); ID_IN_QUEUE.Clear();
Stop();
} }
private void StartTask() private void StartTask()
@ -128,7 +128,7 @@ namespace DotXxlJob.Core
_jobLogger.Log("<br>----------- xxl-job job execute start -----------<br>----------- Param:{0}", triggerParam.ExecutorParams); _jobLogger.Log("<br>----------- xxl-job job execute start -----------<br>----------- Param:{0}", triggerParam.ExecutorParams);
result = await Executor.Execute(triggerParam); result = await Executor.Execute(triggerParam, ct);
_jobLogger.Log("<br>----------- xxl-job job execute end(finish) -----------<br>----------- ReturnT:" + result.Code); _jobLogger.Log("<br>----------- xxl-job job execute end(finish) -----------<br>----------- ReturnT:" + result.Code);
} }
@ -151,9 +151,8 @@ namespace DotXxlJob.Core
} }
_cancellationTokenSource.Dispose(); _cancellationTokenSource?.Dispose();
_cancellationTokenSource = null; _cancellationTokenSource = null;
}, _cancellationTokenSource.Token); }, _cancellationTokenSource.Token);

@ -1,3 +1,4 @@
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using DotXxlJob.Core.Model; using DotXxlJob.Core.Model;
@ -19,7 +20,7 @@ namespace DotXxlJob.Core.TaskExecutors
public string GlueType { get; } = Constants.GlueType.BEAN; public string GlueType { get; } = Constants.GlueType.BEAN;
public Task<ReturnT> Execute(TriggerParam triggerParam) public Task<ReturnT> Execute(TriggerParam triggerParam, CancellationToken cancellationToken)
{ {
var handler = _handlerFactory.GetJobHandler(triggerParam.ExecutorHandler); var handler = _handlerFactory.GetJobHandler(triggerParam.ExecutorHandler);
@ -27,7 +28,7 @@ namespace DotXxlJob.Core.TaskExecutors
{ {
return Task.FromResult(ReturnT.Failed($"job handler [{triggerParam.ExecutorHandler} not found.")); return Task.FromResult(ReturnT.Failed($"job handler [{triggerParam.ExecutorHandler} not found."));
} }
var context = new JobExecuteContext(this._jobLogger, triggerParam.ExecutorParams); var context = new JobExecuteContext(this._jobLogger, triggerParam.ExecutorParams, cancellationToken);
return handler.Execute(context); return handler.Execute(context);
} }
} }

@ -1,3 +1,4 @@
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using DotXxlJob.Core.Model; using DotXxlJob.Core.Model;
@ -7,6 +8,6 @@ namespace DotXxlJob.Core
{ {
string GlueType { get; } string GlueType { get; }
Task<ReturnT> Execute(TriggerParam triggerParam); Task<ReturnT> Execute(TriggerParam triggerParam, CancellationToken cancellationToken);
} }
} }
Loading…
Cancel
Save