第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

IHostedService/BackgroundService 按計(jì)劃運(yùn)行

IHostedService/BackgroundService 按計(jì)劃運(yùn)行

C#
慕尼黑8549860 2021-11-14 10:46:04
Microsoft在使用 IHostedService 和 BackgroundService 類在微服務(wù)IHostedService中實(shí)現(xiàn)后臺(tái)任務(wù)的永久/連續(xù)示例使用while+ Task.Delay'pattern'。這用代碼片段說(shuō)明,簡(jiǎn)化版本就在下面。public class GracePeriodManagerService : BackgroundService(...) protected override async Task ExecuteAsync(CancellationToken stoppingToken){    while (!stoppingToken.IsCancellationRequested)    {        //Do work        await Task.Delay(timeSpan, stoppingToken);    }}這種模式受到緩慢轉(zhuǎn)變的影響 - 工作每timeSpan+完成一次how_long_work_took。即使在how_long_work_took一段時(shí)間內(nèi)非常小,它也會(huì)加起來(lái)。我想避免timeSpan根據(jù)work花費(fèi)的時(shí)間進(jìn)行計(jì)算。運(yùn)行每個(gè)fixed_amount_of_time的穩(wěn)健解決方案是什么?.大聲思考:如果我使用任務(wù)調(diào)度程序庫(kù),比如HangFire,在里面ExecuteAsync使用IHostedService/BackgroundService甚至更有意義嗎?獎(jiǎng)勵(lì)是能夠在某個(gè)時(shí)間點(diǎn)(例如午夜)運(yùn)行任務(wù)
查看完整描述

2 回答

?
慕尼黑的夜晚無(wú)繁華

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊

這就是我處理此類事情的方式......在我的情況下,我需要在特定日期、特定時(shí)間啟動(dòng)服務(wù)并每隔 x 天重復(fù)一次。但我不知道這是否正是您要找的東西:)


public class ScheduleHostedService: BackgroundService

{

    private readonly ILogger<ScheduleHostedService> _logger;

    private readonly DaemonSettings _settings;


    public ScheduleHostedService(IOptions<DaemonSettings> settings, ILogger<ScheduleHostedService> logger)

    {

        _logger = logger;

        _settings = settings.Value;

    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)

    {

        DateTime? callTime=null;

        if (_settings.StartAt.HasValue)

        {


            DateTime next = DateTime.Today;

            next = next.AddHours(_settings.StartAt.Value.Hour)

                .AddMinutes(_settings.StartAt.Value.Minute)

                .AddSeconds(_settings.StartAt.Value.Second);

            if (next < DateTime.Now)

            {

                next = next.AddDays(1);

            }


            callTime = next;

        }


        if (_settings.StartDay.HasValue)

        {

            callTime = callTime ?? DateTime.Now;

            callTime = callTime.Value.AddDays(-callTime.Value.Day).AddDays(_settings.StartDay.Value);

            if (callTime < DateTime.Now)

                callTime = callTime.Value.AddMonths(1);

        }

        if(callTime.HasValue)

            await Delay(callTime.Value - DateTime.Now, stoppingToken);

        else

        {

            callTime = DateTime.Now;

        }

        while (!stoppingToken.IsCancellationRequested)

        {

            //do smth

            var nextRun = callTime.Value.Add(_settings.RepeatEvery) - DateTime.Now;


            await Delay(nextRun, stoppingToken);

        }

    }

    static async Task Delay(TimeSpan wait, CancellationToken cancellationToken)

    {

        var maxDelay = TimeSpan.FromMilliseconds(int.MaxValue);

        while (wait > TimeSpan.Zero)

        {

            if (cancellationToken.IsCancellationRequested)

                break;

            var currentDelay = wait > maxDelay ? maxDelay : wait;

            await Task.Delay(currentDelay, cancellationToken);

            wait = wait.Subtract(currentDelay);

        }

    }

}

我編寫(xiě)了 Delay 函數(shù)來(lái)處理超過(guò) 28 天的延遲。


查看完整回答
反對(duì) 回復(fù) 2021-11-14
?
慕斯709654

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊

您可以考慮使用 .NET 的 Reactive 擴(kuò)展,并將其實(shí)現(xiàn)為帶有 Timer和Cancellation Token. 使用 aScheduler您可以確定最佳線程方法(請(qǐng)參閱此處)


下面的代碼片段可用于ExecuteAsync顯示任意 3 秒啟動(dòng)時(shí)間然后具有 60 秒到期日期的方法(可以是任何時(shí)間長(zhǎng)度。注意Timestamp()它允許使用整數(shù)傳遞本地時(shí)間。


CancellationToken cancellationToken = CancellationToken.None;


Observable

  .Timer(TimeSpan.FromSeconds(3), TimeSpan.FromSeconds(60))

  .Timestamp()

  .ObserveOn(NewThreadScheduler.Default)

  .Subscribe(  

        x =>

       {

            // do some task

       } , 

        cancellationToken);


查看完整回答
反對(duì) 回復(fù) 2021-11-14
  • 2 回答
  • 0 關(guān)注
  • 356 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)