2017-03-08 5 views
5

C 번호를 작성하는 것입니다 내가 당신이 원하는 무엇이든 할 수 있도록 키워드를 기다리고 그들이 비동기을 열었다 참조하십시오. 그러나 API의 표면적은 very large으로 보이며 제한이 있는지 잘 모르겠습니다. 이 가능한 경우 특히 내가 관심이 내가 전에 논의 Reddit from a while에 대한 링크가 있습니다은 가능한 7 아웃 인 IObservable <T> 발생

public IObservable<int> Generate(){ 
    return Observable.Timer(TimeSpan.FromSeconds(1)).Select(_=>RandomNumber()) 
    .Concat(Observable.Timer(TimeSpan.FromSeconds(2)).Select(_=>10)) 
    .Replay(); 

} 

에 해당 생각

int RandomNumber(){..} 

public async IObservable<int> Generate(){ 
    while(true){ 
     await Observable.Timer(TimeSpan.FromSeconds(1)).Select(_=>RandomNumber()); 

     await Observable.Timer(TimeSpan.FromSeconds(2)).Select(_=>10); 
    } 
} 

왜 비동기 await를 # 계산 식 경우에만 F만큼 강력 할 수있다 그들은있을 수 있었다.

답변

0

나는 (지금은) 전혀 생각하지 않을 것이다 :

컴파일러는 어떻게 든 구성하고 반환하는 구체적인 형태로 함께 코드를 스티치한다. IObservable<T>은 형식이 아니므로 컴파일러에서 구성 할 수 없습니다. 또한

, Release Notes 7.0 :

새로운 언어 기능은 비동기 방식은 태스크 태스크 보이드 외에 다른 유형 를 반환 할 수 있다는 것을 의미한다. 반환 된 형식은 이 여전히 비동기 패턴을 충족해야합니다. 즉, GetAwaiter 메서드는 에 액세스 할 수 있어야합니다. 누군가가 IObservable<T>를 구현하고 또한 작업 API의 요구 사항을 충족 것 인 ObservableTask<T> 또는 무언가를 만들 수 없다는 것을 말하는 것이 아니다

. 아직 완료되지 않았습니다.

당신은 여전히 ​​불일치의 문제가있을 것입니다 : Task<T> 주위에 0-1 T 객체, IObservable<T> 0을 반환-N T 객체를 반환 회귀한다.