Попытка настроить Reactive Extension для простого примера. Например: есть генератор случайных чисел, и в любое время выявляется число, делимое на три, «Напиши привет» и наблюдай за событием. Однако это не похоже на работу. Не стесняйтесь редактировать строки или переписать код, чтобы заставить работать правильно. Это быстрое копирование двух страниц в консольную программу.
В конце концов, необходимо, чтобы генератор чисел работал в потоке, а SeeNumber наблюдает в консольной программе в течение одной минуты.
Код следует за этим ресурсом: Реактивные расширения
Цели, которые могут быть включены в код:
- Сделать генератор чисел потоковым
- Также читаете, хороши ли предметы в 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;
}
}
Создание простого примера из учебника,