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

我必须每分钟运行一个 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);

    });

}


交互式爱情
浏览 120回答 1
1回答

慕田峪4524236

在我看来,这就是你需要的:public void Test(){&nbsp; &nbsp; IObservable<Unit> timer =&nbsp; &nbsp; &nbsp; &nbsp; Observable&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Defer(() =>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var now = DateTimeOffset.Now;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var result = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute + 1, 0, now.Offset);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return Observable.Timer(result, TimeSpan.FromMinutes(1.0));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .SelectMany(x => Observable.FromAsync(() => InvokeMethod()));&nbsp; &nbsp; timer.Subscribe();}请记住,这会随着时间的推移而漂移,并且不会每分钟触发一次。每次都需要重新调整。使用Observable.Generate会更好。public void Test(){&nbsp; &nbsp; IObservable<Unit> timer =&nbsp; &nbsp; &nbsp; &nbsp; Observable&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Generate(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new { now = DateTimeOffset.Now, count = 0 },&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t => true,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t => new { t.now, count = t.count + 1 },&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t => t.count,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t => t.now.AddMinutes(t.count))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .SelectMany(x => Observable.FromAsync(() => InvokeMethod()));&nbsp; &nbsp; timer.Subscribe();}
打开App,查看更多内容
随时随地看视频慕课网APP