【发布时间】:2020-08-28 09:03:14
【问题描述】:
我正在尝试使用数据流块,我需要监视通过的项目以进行单元测试。
为了做到这一点,我在我的TransformBlock<Tinput, T> 的ISourceBlock<T> 上使用AsObservable() 方法,
所以我可以在执行后检查我的管道的每个块都生成了预期值。
管道
{
...
var observer = new MyObserver<string>();
_block = new TransformManyBlock<string, string>(MyHandler, options);
_block.LinkTo(_nextBlock);
_block.AsObservable().Subscribe(observer);
_block.Post("Test");
...
}
我的观察者
public class MyObserver<T> : IObserver<T>
{
public List<Exception> Errors = new List<Exception>();
public bool IsComplete = false;
public List<T> Values = new List<T>();
public void OnCompleted()
{
IsComplete = true;
}
public void OnNext(T value)
{
Values.Add(value);
}
public void OnError(Exception e)
{
Errors.Add(e);
}
}
所以基本上我为我的观察者订阅了转换块,并且我希望通过的每个值都注册到我的观察者“值”列表中。
但是,虽然IsComplete 设置为true,并且OnError() 成功注册异常,
OnNext() 方法永远不会被调用,除非它是管道的最后一个块......
我不知道为什么,因为链接到这个sourceBlock的“nextblock”成功接收到数据,证明有一些数据正在退出该块。
据我了解,AsObservable 应该报告退出块的每个值,而不仅仅是其他链接块未使用的值...
我做错了什么?
【问题讨论】:
标签: c# .net tpl-dataflow