增加后台任务同步执行方法
This commit is contained in:
parent
1a5da57187
commit
1983778d22
|
@ -41,11 +41,11 @@ namespace Falcon.SugarApi.Test
|
||||||
}
|
}
|
||||||
public override float RunTimespan => 1;
|
public override float RunTimespan => 1;
|
||||||
|
|
||||||
protected async override Task RunAsync() {
|
protected async override Task<bool> RunAsync() {
|
||||||
this.Log.LogInformation($"{DateTime.Now.ToString("HH:mm:ss")}:BackTaskAsync Run!");
|
this.Log.LogInformation($"{DateTime.Now.ToString("HH:mm:ss")}:BackTaskAsync Run!");
|
||||||
//Thread.Sleep(3 * 1000);
|
//Thread.Sleep(3 * 1000);
|
||||||
await Task.Delay(new TimeSpan(0,0,3));
|
await Task.Delay(new TimeSpan(0,0,3));
|
||||||
await Task.CompletedTask;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,9 +76,14 @@ namespace Falcon.SugarApi.Test
|
||||||
base.OnCompleted(t);
|
base.OnCompleted(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Task RunAsync() {
|
protected override Task<bool> RunAsync() {
|
||||||
|
this.Log.LogInformation($"{DateTime.Now.ToString("HH:mm:ss")}:Test RunAsync!");
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool Run() {
|
||||||
this.Log.LogInformation($"{DateTime.Now.ToString("HH:mm:ss")}:Test Run!");
|
this.Log.LogInformation($"{DateTime.Now.ToString("HH:mm:ss")}:Test Run!");
|
||||||
return Task.CompletedTask;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,9 +11,15 @@ namespace Falcon.SugarApi.BackTask
|
||||||
public abstract class BackgroundLongTask : BackgroundService, IDisposable
|
public abstract class BackgroundLongTask : BackgroundService, IDisposable
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 要执行的任务
|
/// 要执行的任务,异步。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected abstract Task RunAsync();
|
/// <returns>继续执行True,退出False</returns>
|
||||||
|
protected virtual Task<bool> RunAsync() { return Task.FromResult(false); }
|
||||||
|
/// <summary>
|
||||||
|
/// 要执行的任务,同步。
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>继续执行True,退出False</returns>
|
||||||
|
protected virtual bool Run() { return false; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行时间间隔,秒
|
/// 执行时间间隔,秒
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -36,7 +42,11 @@ namespace Falcon.SugarApi.BackTask
|
||||||
protected virtual void OnException(BackgroundLongTask t, Exception ex) { }
|
protected virtual void OnException(BackgroundLongTask t, Exception ex) { }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 用于定期执行任务的委托
|
/// 用于定期执行任务的委托,异步
|
||||||
|
/// </summary>
|
||||||
|
private Action actionAsync;
|
||||||
|
/// <summary>
|
||||||
|
/// 用于定期执行任务的委托,同步
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private Action action;
|
private Action action;
|
||||||
|
|
||||||
|
@ -46,13 +56,15 @@ namespace Falcon.SugarApi.BackTask
|
||||||
/// 构造一个后台长期任务
|
/// 构造一个后台长期任务
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public BackgroundLongTask() {
|
public BackgroundLongTask() {
|
||||||
action = async () => {
|
actionAsync = async () => {
|
||||||
OnStart(this);
|
OnStart(this);
|
||||||
while (!TokenSource.Token.IsCancellationRequested) {
|
while (!TokenSource.Token.IsCancellationRequested) {
|
||||||
await Task.Delay(TimeSpan.FromSeconds(RunTimespan))
|
await Task.Delay(TimeSpan.FromSeconds(RunTimespan))
|
||||||
.ContinueWith(async _ => {
|
.ContinueWith(async _ => {
|
||||||
try {
|
try {
|
||||||
await RunAsync();
|
if (!await RunAsync()) {
|
||||||
|
TokenSource.Cancel();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
OnException(this, ex);
|
OnException(this, ex);
|
||||||
|
@ -62,6 +74,20 @@ namespace Falcon.SugarApi.BackTask
|
||||||
}
|
}
|
||||||
OnStop(this);
|
OnStop(this);
|
||||||
};
|
};
|
||||||
|
action = () => {
|
||||||
|
OnStart(this);
|
||||||
|
while (!TokenSource.Token.IsCancellationRequested) {
|
||||||
|
Thread.Sleep(TimeSpan.FromSeconds(RunTimespan));
|
||||||
|
try {
|
||||||
|
if (!Run()) break;
|
||||||
|
OnCompleted(this);
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
OnException(this, ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
OnStop(this);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 服务器启动时执行
|
/// 服务器启动时执行
|
||||||
|
@ -69,6 +95,7 @@ namespace Falcon.SugarApi.BackTask
|
||||||
/// <param name="stoppingToken">退出信号</param>
|
/// <param name="stoppingToken">退出信号</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
protected override Task ExecuteAsync(CancellationToken stoppingToken) {
|
protected override Task ExecuteAsync(CancellationToken stoppingToken) {
|
||||||
|
_ = Task.Factory.StartNew(actionAsync, stoppingToken);
|
||||||
_ = Task.Factory.StartNew(action, stoppingToken);
|
_ = Task.Factory.StartNew(action, stoppingToken);
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user