我在 VB.NET 中有以下代码,它从激光读取测量值,直到工件旋转 480 度。总而言之,CTP 和 RX 的一个非常好的应用程序。
Dim measurementsList = Await machine.
Measurements.
TakeUntil(machine.Driver.RotateC(480, 10).ToObservable()).
ToList()
注意 machine.Measurements 在这种情况下是 IObservable(of double) 并且是来自网络上的激光测量设备的读数。
但是我正在考虑向 IObserverable 添加扩展方法(现在是 C# 代码)
public static IObservable<T> TakeUntil<T,R>(this IObservable<T> This, Task<R> other){
return This.TakeUntil(other.ToObservable());
}
这真的没什么大不了的,可以让我把我的代码写成
Dim measurementsList = Await machine.
Measurements.
TakeUntil(machine.Driver.RotateC(480, 10)).
ToList()
这似乎更流畅,但鉴于 RX 没有提供如此明显的过载,我可能错过了这样一个过载是一个坏主意的明显原因。我应该添加这个还是坚持显式转换?
(顺便说一句,标签 async-ctp 和 async-await 不应该合并)