为什么

var a = Observable.Interval(TimeSpan.FromSeconds(1))
    .Publish();

a.Subscribe(o =>
{
    Console.WriteLine("Test");
});
a.Connect();


火,但不是

var a = Observable.Interval(TimeSpan.FromSeconds(1))
    .MaxBy(o=>o)
    .Publish();

a.Subscribe(o =>
{
    Console.WriteLine("Test");
});
a.Connect();


我正在尝试在不同的情况下使用MaxBy,但甚至无法使以上功能正常工作。

这是我更复杂的例子

var _telemetryBatchObservable = Observable.FromEventPattern<DeviceStateStreamEventArg>(
        ev => DeviceStateStreamEvent += ev,
        ev => DeviceStateStreamEvent -= ev)
    .Synchronize()
    .GroupBy(o => o.EventArgs.DeviceId)
    .Select(o => o.MaxBy(i => i.EventArgs.DateTimeOffset))
    .SelectMany(o => o.Select(i => i))
    .SelectMany(o => o.Select(i => i))
    .Buffer(TimeSpan.FromMilliseconds(5000), 100)
    .Publish();

最佳答案

当源可观察者终止时,MaxMaxBy仅发出单个值。如果您有不间断的信号源,它们将永远不会发光。

尝试使用以下代码作为反示例:

var a = Observable.Interval(TimeSpan.FromSeconds(1))
    .Take(3) //causes termination after 3 values
    .MaxBy(o => o)
    .Publish();

关于c# - react 性扩展.MaxBy,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45840230/

10-10 13:15