.net core控制台基於backgroundService后台任務實現的指定時間運行的定時器


簡單的實現了一個.net core控制台基於backgroundService后台任務實現的指定時間運行的定時器,到了第二天也會默認啟動此時間點,可自定義配置多個時間段,多線程運行。話不多說,直接帖代碼。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!--當天的某一點時間,可自己手動設置多段啟動,也可手動刪除,第二天到了時間點會自動默認啟動-->

<!--時間格式: 小時:分鍾-->
<add key="Time" value="11:51"></add>
<add key="Time1" value="11:52"></add>
<add key="Time2" value="12:10"></add>
</appSettings>
</configuration>
這里配置文件先配置好你要哪個時間點啟動任務,可自己設置時間,刪除時間。
然后獲取配置里面的對應的值

public class CommenHelper
{
/// <summary>
/// 根據索引獲取配置文件的值
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public static string GetConfigTime(int index)
{
return ConfigurationManager.AppSettings.Get(index);
}
/// <summary>
/// 獲取配置文件時間段數量
/// </summary>
/// <returns></returns>
public static int GetConfigTimeCount()
{
return ConfigurationManager.AppSettings.Count;
}
}

這兩個方法先定義好,后面會用到,

public class TimeBackgroundService : BackgroundService
{
//服務一啟動就會執行此方法
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
Console.WriteLine("Execute執行!");
if (!stoppingToken.IsCancellationRequested)
{
await Task.Run(() => SetAllTaskTime());
}
}

public override async Task StopAsync(CancellationToken stoppingToken)
{
await Task.Run(() => { Console.WriteLine("已注銷停止服務!"); });
}
/// <summary>
/// 業務邏輯實現
/// </summary>
/// <param name="state"></param>
private void DoWork(object state)
{
Console.WriteLine("業務邏輯開始執行一次。。。。。");
Thread.Sleep(120000);
Console.WriteLine("業務邏輯開始執行一次完成。。。。。");
}
/// <summary>
/// 循環配置文件里面多個時間實現定時器
/// </summary>
private void SetAllTaskTime()
{
var count = CommenHelper.GetConfigTimeCount();
for (int i = 0; i < count; i++)
{
DateTime now = DateTime.Now;
DateTime oneOClock = DateTime.Today.AddHours(Convert.ToDouble(CommenHelper.GetConfigTime(i).Split(":")[0]))
.AddMinutes(Convert.ToDouble(CommenHelper.GetConfigTime(i).Split(":")[1]));//設置運行時間
//如果當前時間大於設置時間,即第二天這個時間在啟動
if (now > oneOClock)
{
oneOClock = oneOClock.AddDays(1.0);
}
int msUntilFour = (int)((oneOClock - now).TotalMilliseconds);
Console.WriteLine(oneOClock + "開始執行。。。。。");
var t = new System.Threading.Timer(DoWork);
t.Change(msUntilFour, Timeout.Infinite);
}
}
}

在DoWork()方法里面實現要指定時間啟動的任務邏輯即可。
定時器用的是System.Threading.Timer里面的timer。不祥的可以去查資料。

在再program.cs類里面注入剛才定義的TimeBackgroundService服務。

static void Main(string[] args)
{
var build = new HostBuilder()
.ConfigureServices(option =>
{
option.AddHostedService<TimeBackgroundService>();
});

build.RunConsoleAsync();

Console.ReadLine();
}
}

以上代碼即為一個簡單的后台定時任務。
原文鏈接:https://blog.csdn.net/ZhaoHuaQiao_FL/article/details/106947099


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM