【问题标题】:Create Observable for Streaming Class in Net Core在 Net Core 中为 Streaming 类创建 Observable
【发布时间】:2019-10-09 06:28:19
【问题描述】:

如何为类创建 Observable? 例如,这里是持续销售类

public class Product
{
     public int ProductId {get;set;}
     public string ProductDescription {get;set;}
     public float Sales{get;set;}
}

如何创建 Observable?假设他们使用 Add() 进入 List<Product>,产品会不断添加代表交易。

任何时候,一个产品被添加到控制台程序的任何地方,订阅者都会观察到它。

var productSample1 = new Product { ProductId = 1, ProductDescription = "Furniture" };
var productSample2 = new Product { ProductId = 2, ProductDescription = "Book" };
var productSample3 = new Product { ProductId = 3, ProductDescription = "car" };

var productlist = new List<Product>();
productlist.Add(productSample1);
....
productlist.Add(productSample2);
...
productlist.Add(productSample3);

也许是这样的,

var products = Observable.FromEventPattern < EventHandler<Product>, Product>();

尝试阅读下面的资源,尝试添加,

Generate numbers at random time intervals with rx

Intro to Rx

【问题讨论】:

  • 您的生成器的使用寿命是多少(产品是如何传入的)?没那么容易回答。它可能是冷/热可观察对象,Observable.FromEventPattern/ Observable.Create/ ...
  • 嗨 @ntohl 说每分钟 20 个产品,它可以是一个热门的观察对象
  • 你们这一代人是什么样子的?代码在哪里,new Product 会在哪里?或者这就是你想委托给 Observable 的?

标签: c# .net asp.net-core .net-core system.reactive


【解决方案1】:

您可以使用ObservableCollection:

var list = new ObservableCollection<int>();
using (var o = Observable
    .FromEventPattern<NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs>(h => list.CollectionChanged += h, h => list.CollectionChanged -= h)
    .Subscribe(e => Console.WriteLine($"{e.EventArgs.Action} {e.EventArgs.NewItems[0]}")))
{
    list.Add(1);
    list.Add(10);
}

// Add 1
// Add 10

或者转过来从订阅中添加:

var list = new List<int>();
var subject = new Subject<int>();
using (var o = subject.Subscribe(i => list.Add(i)))
{
    subject.OnNext(1);
    subject.OnNext(10);
}

foreach (var i in list)
{
    Console.WriteLine(i);
}

// 1
// 10

【讨论】:

  • 谢谢,每当我在另一个完全独立的语句中运行语句 list.Add(productSample3) 或 list.Add(productSample4) 或 list.Add(productSample5) 时,它都会,自动读入 Observable?
  • @earlwatkins85,“自动读入 Observable”是什么意思?
  • 我也描述了更多问题;为什么我们要摆脱 Product 并用 int 替换,试图为自定义类指定问题的答案,谢谢
  • 项目类型无关紧要。这个答案对任何项目类型都有效,并且在 cmets 中有相应的控制台输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
相关资源
最近更新 更多