相关疑难解决方法(0)

asp.net core托管服务中的“timer + Task.Run”与“while循环+ Task.Delay”

我有一个要求,后台服务应该在Process每天凌晨 0:00 运行方法

因此,我的一位团队成员编写了以下代码:

public class MyBackgroundService : IHostedService, IDisposable
{
    private readonly ILogger _logger;
    private Timer _timer;

    public MyBackgroundService(ILogger<MyBackgroundService> logger)
    {
        _logger = logger;
    }

    public void Dispose()
    {
        _timer?.Dispose();
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
        TimeSpan interval = TimeSpan.FromHours(24);
        TimeSpan firstCall = DateTime.Today.AddDays(1).AddTicks(-1).Subtract(DateTime.Now);

        Action action = () =>
        {
            Task.Delay(firstCall).Wait();

            Process();

            _timer = new Timer(
                ob => Process(),
                null,
                TimeSpan.Zero,
                interval
            );
        };

        Task.Run(action);
        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        _timer?.Change(Timeout.Infinite, 0);

        return Task.CompletedTask; …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous timer task asp.net-core-hosted-services

4
推荐指数
1
解决办法
4798
查看次数

在给定的时间间隔内运行代码

我想每1分钟,15分钟等运行一个代码.有没有比跟随时间间隔1秒的定时器控制更好的方法.一个c#解决方案也可以.

If Now.Minute Mod 15 = 0 Then
'run code for 15 min
End If
If Now.Minute Mod 1 = 0 Then
'run code for 1 min
End If
Run Code Online (Sandbox Code Playgroud)

c# vb.net

3
推荐指数
1
解决办法
7054
查看次数