Reactive Extension Simple Example not Working with Number Generator

我是研究僧i 提交于 2019-12-25 00:14:03

问题


Trying to setup Reactive Extension for a simple example. Eg: there is random Number Generator, and anytime Number Divisible by three is spotted, "Write Hello" and Observe the Event. However it does not seem to be working. Feel free to edit line, or rewrite code to make work correctly. Its a quick two page copy into Console Program.

Eventually, want number generator to work in a stream , while SeeNumber observes in a Console program for one minute.

Code follows this resource: Reactive Extensions

Goals which can be incorporated in code:

  1. Make the Number Generator streaming
  2. Also reading, are Subjects are good in RX? Feel free to modify code without subjects if 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();
}

Produce Number:

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

See Number:

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

Creating a simple example from tutorial,

来源:https://stackoverflow.com/questions/58263480/reactive-extension-simple-example-not-working-with-number-generator

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!