C00225155-02/C00225155/MegaRobo.C00225155/MegaRobo.RRQuartz/JobItem.cs

63 lines
2.1 KiB
C#

using System;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using MegaRobo.Contract;
namespace MegaRobo.RRQuartz
{
public class JobItem : JobItemBase
{
public JobItem()
{
}
public JobItem(JobItem jobItem) : base(jobItem)
{
this.ResultAction = jobItem.ResultAction;
this.ExecuteAction = jobItem.ExecuteAction;
}
public JobItem(string name, string title, IConnection targetService, string descr = null, [CallerFilePath] string sourceFilePath = "", [CallerMemberName] string memberName = "", [CallerLineNumber] int sourceLineNumber = 0)
: base(name, title, targetService, descr, sourceFilePath, memberName, sourceLineNumber)
{
}
public JobItem(string name, string title, IConnection targetService, TimeSpan timeout, string descr = null, [CallerFilePath] string sourceFilePath = "", [CallerMemberName] string memberName = "", [CallerLineNumber] int sourceLineNumber = 0)
: this(name, title, targetService, descr, sourceFilePath, memberName, sourceLineNumber)
{
this.Timeout = timeout;
}
public Action ExecuteAction { get; set; }
public Action<object> ResultAction { get; set; }
public override async Task OnExecuteActionAsync()
{
if(this.ExecuteAction == null) return;
await Task.Delay(0);
this.ExecCount++;
this.Status = JobStatus.HasSend;
this.UsedTime.Restart();
this.ExecuteAction.Invoke();
}
public override async void Restart()
{
this.ExecCount = 0;
await this.OnExecuteActionAsync();
}
}
public class JobItem<TMode> : JobItem where TMode : Enum
{
public JobItem(TMode mode, string name, string title, IConnection targetService, TimeSpan timeout, string descr = null) : base(name, title, targetService, timeout, descr)
{
// this.Name = $"{mode}_{name}";
this.Mode = mode;
}
public TMode Mode { get; }
}
}