1. 程式人生 > 其它 >mvc基礎框架做Timer定時任務

mvc基礎框架做Timer定時任務

Timer,CancellationToken,IHostedService,IDisposable注意使用的類
本來是要做依賴注入 方法在介面上實現 現在出了點其他報錯原因 先把程式碼實現
首先宣告一個介面 繼承IHostedService,IDisposable他會繼承實現我們要使用的方法

public interface IService : IHostedService, IDisposable { void exec(); }
第二步建一個Service繼承IService
`public class Service : IService
{
public static int a = 0;
private Timer _timer;

    /// <summary>
    /// 繼承IHostedService
    /// </summary>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public Task StartAsync(CancellationToken cancellationToken)
    {
        _timer = new Timer(dowork, null, TimeSpan.Zero,
              TimeSpan.FromSeconds(2));//頻率兩分鐘一次
        return Task.CompletedTask;
    }
    public void dowork(object state)
    {
        exec();
    }
    /// <summary>
    /// 執行程式碼塊
    /// </summary>
    public void exec()
    {
        a++;
        Console.WriteLine("第{0}次執行", a);
    }


    /// <summary>
    /// 繼承IHostedService
    /// </summary>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public Task StopAsync(CancellationToken cancellationToken)
    {
        _timer?.Change(Timeout.Infinite, 0);
        return Task.CompletedTask;
    }
    /// <summary>
    /// 繼承IDisposable
    /// </summary>
    public void Dispose()
    {
        _timer?.Dispose();
    }
 
}`

第三步 程式啟動後 自動呼叫Service
public class HomeController : Controller { //這裡依賴注入報錯 不知道原因 //private IService _service; //private HomeController(IService service) //{ // _service = service; //} public IActionResult Index() { //CancellationTokenSource 和 CancellationToken在非同步任務中的使用 // CancellationTokenSource cts = new CancellationTokenSource(1000); 或者傳入時間 毫秒 或者Timespan //建立一個 CancellationTokenSource,然後呼叫非同步方法時,傳入 CancellationToken,它是一個輕量級物件,可以通知請求是否已取消 CancellationTokenSource cts = new CancellationTokenSource(); Service service = new Service(); service.StartAsync(cts.Token); return View(); } }


最後實現效果 自動執行