ワークピースが 480 度回転するまでレーザーから測定値を読み取る VB.NET の次のコードがあります。全体として、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 をマージしないでください)