2012-11-19 11 views
1

VB.NET에서 공작물이 480도 회전 할 때까지 레이저에서 측정 값을 읽는 다음 코드가 있습니다. All in all CTP와 RX를 함께 사용하면 매우 유용합니다.Observable.TakeUntil (Task task) 확장 메소드를 추가하는 것은 나쁜 생각입니까?

Dim measurementsList = Await machine. 
    Measurements. 
    TakeUntil(machine.Driver.RotateC(480, 10).ToObservable()). 
    ToList() 

참고 machine.Measurements이 경우에 (이중의) IObservable하고 네트워크에 측정 장치에서 레이저 수치이다.

내가 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는 그런 것을 제공하지 않는다. 명백한 과부하 perhapps 나는 그러한 명백한 이유를 놓치고있다. 과부하는 나쁜 생각이다. 이 내용을 추가하거나 명시적인 변환을 사용해야합니까?

당신이 무엇을하고 있는지 아무 문제가 없습니다

답변

3

(BTW 태그 비동기-CTP 및 비동기 await를 병합하지 않아야),하지만 난 바트 드 스멧로 긴하고 유익한 게시물에서, Rx v2.0 and .NET 4.5 “async”/“await” – a better together story을 검토 할 것 .

Linq-to-Await을 확인하여 문제가 없는지 확인할 수도 있습니다. 사실 소수의 오퍼레이터를 보면, 당신의 방법이 꽤 비슷하다는 것을 알 수 있습니다. 단지 당신이 Task를 취하는 경우를 제외하고, Paul Betts Linq-To-Await에서 그는 Func<T, Task<R>>을 사용합니다. 이 경우 코드는 다음과 같이 표시 될 수 있습니다 (매개 변수없이 Func 사용) :

public static IObservable<T> TakeUntil<T,R>(this IObservable<T> This, Func<Task<R>> other){ 
    return This.TakeUntil(other().ToObservable()); 
} 

     var q = Measurements.TakeUntil(async() => await machine.Driver.RotateC(480, 10));