Replay (1) возвращает результат от отключенного источника - PullRequest
1 голос
/ 15 октября 2019

У меня есть поток Observable (представляющий сетевое соединение значений данных), который я воспроизводлю и повторно выполняю. Основной источник отключается, как и ожидалось, когда число подписчиков достигает нуля, но Replay (1) возвращает значение из этого источника следующему подписчику, который я считаю устаревшим. Я исправил это с помощью пользовательской реализации ReplaySubject, которая забывает последнее значение при отключении последнего наблюдателя, но это утечка абстракции, и мне интересно, есть ли более нелепый способ решения этой проблемы?

Пример неудачного теста:

[Test]
public async Task Replay_DoesNotReplay_AfterRefCountDisconnection()
{
    int i = 0;

    var replay = Observable.Defer(
            () =>
            {
                i++;
                return new[] {i, i}.ToObservable();
            })
        .Replay(1)
        .RefCount();

    var first = await replay.Take(1).ToTask();
    var second = await replay.Take(1).ToTask();

    Assert.AreEqual(1, first);
    Assert.AreEqual(2, second);
}
...