Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每分钟都有一些C方法调用(asp.net web api web)_C#_System.reactive - Fatal编程技术网

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

C# 每分钟都有一些C方法调用(asp.net web api web),c#,system.reactive,C#,System.reactive,我必须每分钟运行一个C方法。我确实创建了一个observable for timer并每1分钟调用一次,我在类构造函数中使用了这段代码。还有其他解决办法吗 public Test() { IObservable<long> timer = Observable .Defer(() => { var now = DateTimeOffset.Now; var result = new DateTimeOffset(n

我必须每分钟运行一个C方法。我确实创建了一个observable for timer并每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);
    });
}

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

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();
}

还有其他解决办法吗?那么你的代码有效吗?如果是这样的话,这应该发布在StackExchange Forum什么样的应用程序上?Win表单、WPF、MVC。NET Core?这是一个asp.NET web api appA web应用程序,似乎并不适合长时间运行的后台进程,因为它通常由web服务器控制,而web服务器更适合于请求/响应设置。Windows服务、系统托盘应用程序或Azure功能等可能会更好。请检查。A是提供的示例之一。请您建议使用Observable.Generate的示例。我需要每分钟发射一次。@user584018-完成。
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();
}