Простой пример реактивного расширения, не работающий с генератором чисел - PullRequest
0 голосов
/ 07 октября 2019

Попытка настроить Reactive Extension для простого примера. Например: есть генератор случайных чисел, и в любое время выявляется число, делимое на три, «Напиши привет» и наблюдай за событием. Однако это не похоже на работу. Не стесняйтесь редактировать строки или переписать код, чтобы заставить работать правильно. Это быстрое копирование двух страниц в консольную программу.

В конце концов, необходимо, чтобы генератор чисел работал в потоке, а SeeNumber наблюдает в консольной программе в течение одной минуты.

Код следует за этим ресурсом: Реактивные расширения

Цели, которые могут быть включены в код:

  1. Сделать генератор чисел потоковым
  2. Также читаете, хороши ли предметы в RX? Не стесняйтесь изменять код без субъектов, если true,

Main.cs

static void Main(string[] args)
{
    var generateNumber = new GenerateNumber();
    var seeNumber = new SeeNumber(generateNumber);
    generateNumber.DivideByThreeSpotted.Subscribe(seeNumber.OnDivideByThreeSpotted);

    Console.WriteLine(generateNumber.NumberValue);
    Console.ReadKey();
}

Номер продукции:

public class GenerateNumber
{
    public int NumberValue { get; set; }

    public GenerateNumber()
    {
        NumberValue = CreateData();
    }

    public Subject<GenerateNumber> divideByThreeSpotted = new Subject<GenerateNumber>();

    public IObservable<GenerateNumber> DivideByThreeSpotted
    {
        get { return this.divideByThreeSpotted; }
    }

    public int CreateData()
    {
        Random random = new Random();
        return random.Next(0, 100);
    }

    public void SpotDivideByThree(GenerateNumber generateNumber)
    {
        try
        {
            if (NumberValue % 3 == 0)
            {
                Console.WriteLine("Number Can be Divided by 3");
                this.divideByThreeSpotted.OnNext(generateNumber);
            }
        }
        catch (Exception exception)
        {
            this.divideByThreeSpotted.OnError(exception);
        }
    }
}

См. Номер:

public class SeeNumber : IDisposable
{
    private IDisposable divideByThreeSpottedSubscription;

    public SeeNumber(GenerateNumber generateNumber)
    {
        this.divideByThreeSpottedSubscription = generateNumber.DivideByThreeSpotted.Subscribe(this.OnDivideByThreeSpotted);
    }

    public void Dispose()
    {
        this.divideByThreeSpottedSubscription.Dispose();
    }

    public void OnDivideByThreeSpotted(GenerateNumber generateNumber)
    {
        GenerateNumber spottedDivisibleByThree = generateNumber;
    }
}

Создание простого примера из учебника,

...