为了账号安全,请及时绑定邮箱和手机立即绑定

每分钟都会调用一些 C# 方法(asp.net web api web)

每分钟都会调用一些 C# 方法(asp.net web api web)

C#
交互式爱情 2022-07-23 16:43:14
我必须每分钟运行一个 C# 方法。我确实创建了一个observablefor 计时器并每 1 分钟调用一次,我在类构造函数中使用了这段代码。还有其他解决方案吗?public Test(){    IObservable<long> timer = Observable        .Defer(() =>    {        var now = DateTimeOffset.Now;        var result = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, 0, 0, now.Offset);        result = result.AddMinutes(((now.Minute / 1) + 1) * 1);        return Observable.Timer(result, TimeSpan.FromMinutes(1.0));    });    timer.Subscribe(async x =>    {        await InvokeMethod().ConfigureAwait(false);    });}
查看完整描述

1 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

在我看来,这就是你需要的:


public void Test()

{

    IObservable<Unit> timer =

        Observable

            .Defer(() =>

            {

                var now = DateTimeOffset.Now;

                var result = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute + 1, 0, now.Offset);

                return Observable.Timer(result, TimeSpan.FromMinutes(1.0));

            })

            .SelectMany(x => Observable.FromAsync(() => InvokeMethod()));


    timer.Subscribe();

}

请记住,这会随着时间的推移而漂移,并且不会每分钟触发一次。每次都需要重新调整。使用Observable.Generate会更好。


public void Test()

{

    IObservable<Unit> timer =

        Observable

            .Generate(

                new { now = DateTimeOffset.Now, count = 0 },

                t => true,

                t => new { t.now, count = t.count + 1 },

                t => t.count,

                t => t.now.AddMinutes(t.count))

            .SelectMany(x => Observable.FromAsync(() => InvokeMethod()));


    timer.Subscribe();

}


查看完整回答
反对 回复 2022-07-23
  • 1 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号