|
|
|
@ -47,33 +47,36 @@ public class BackgroundJobManager : IBackgroundJobManager |
|
|
|
TimeSpan? delay = null) |
|
|
|
{ |
|
|
|
var jobConfiguration = Options.GetJob<TArgs>(); |
|
|
|
var interval = 0; |
|
|
|
if (delay.HasValue) |
|
|
|
{ |
|
|
|
interval = delay.Value.Seconds; |
|
|
|
} |
|
|
|
var jobId = GuidGenerator.Create(); |
|
|
|
var jobArgs = new Dictionary<string, object> |
|
|
|
{ |
|
|
|
{ nameof(TArgs), JsonSerializer.Serialize(args) }, |
|
|
|
{ "ArgsType", jobConfiguration.ArgsType.AssemblyQualifiedName }, |
|
|
|
{ "JobType", jobConfiguration.JobType.AssemblyQualifiedName }, |
|
|
|
{ "JobName", jobConfiguration.JobName }, |
|
|
|
}; |
|
|
|
var jobInfo = new JobInfo |
|
|
|
{ |
|
|
|
Id = jobId.ToString(), |
|
|
|
TenantId = CurrentTenant.Id, |
|
|
|
Name = jobId.ToString(), |
|
|
|
Group = "BackgroundJobs", |
|
|
|
Priority = ConverForm(priority), |
|
|
|
Source = JobSource.System, |
|
|
|
BeginTime = DateTime.Now, |
|
|
|
Args = jobArgs, |
|
|
|
Description = "From the framework background jobs", |
|
|
|
JobType = JobType.Once, |
|
|
|
Interval = interval, |
|
|
|
CreationTime = Clock.Now, |
|
|
|
// 用 BeginTime 表达延迟启动,避免与 JobInfo.Interval(重复间隔)语义混用。
|
|
|
|
// 原实现使用 delay.Value.Seconds(仅取秒分量 0-59),
|
|
|
|
// 会让 TimeSpan.FromMinutes(5) 这类整分钟/整小时的延迟退化为 0,导致任务立即执行。
|
|
|
|
var now = Clock.Now; |
|
|
|
var beginTime = now; |
|
|
|
if (delay.HasValue && delay.Value > TimeSpan.Zero) |
|
|
|
{ |
|
|
|
beginTime = now.Add(delay.Value); |
|
|
|
} |
|
|
|
var jobId = GuidGenerator.Create(); |
|
|
|
var jobArgs = new Dictionary<string, object> |
|
|
|
{ |
|
|
|
{ nameof(TArgs), JsonSerializer.Serialize(args) }, |
|
|
|
{ "ArgsType", jobConfiguration.ArgsType.AssemblyQualifiedName }, |
|
|
|
{ "JobType", jobConfiguration.JobType.AssemblyQualifiedName }, |
|
|
|
{ "JobName", jobConfiguration.JobName }, |
|
|
|
}; |
|
|
|
var jobInfo = new JobInfo |
|
|
|
{ |
|
|
|
Id = jobId.ToString(), |
|
|
|
TenantId = CurrentTenant.Id, |
|
|
|
Name = jobId.ToString(), |
|
|
|
Group = "BackgroundJobs", |
|
|
|
Priority = ConverForm(priority), |
|
|
|
Source = JobSource.System, |
|
|
|
BeginTime = beginTime, |
|
|
|
Args = jobArgs, |
|
|
|
Description = "From the framework background jobs", |
|
|
|
JobType = JobType.Once, |
|
|
|
CreationTime = now, |
|
|
|
// 确保不会被轮询入队
|
|
|
|
Status = JobStatus.None, |
|
|
|
NodeName = TasksOptions.NodeName, |
|
|
|
|