У меня есть следующий код в VB.NET, который считывает измерения с лазера до тех пор, пока заготовка не повернется на 480 градусов. В целом, очень хорошее приложение CTP и RX вместе.
Dim measurementsList = Await machine.
Measurements.
TakeUntil(machine.Driver.RotateC(480, 10).ToObservable()).
ToList()
Обратите внимание, что machine.Measurements в этом случае имеет значение IObservable(of double) и является показаниями лазерного измерительного устройства в сети.
Однако я рассматривал возможность добавления метода расширения в IObserverable (теперь код С#)
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)