2017-03-08 15 views
5

C# yazmaya ve ben istediğiniz her şeyi izin anahtar kelimeleri bekliyor onlar asenk açtı görüyoruz. Ancak API'nin yüzey alanı very large gibi görünüyor ve sınırlamalardan emin değilim. Bu mümkün olup olmadığını Özellikle İlgileniyorum ben önce tartışmaya Reddit from a while bir bağlantı vardırmümkün 7 çıktı bir IObservable <T> jeneratör

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

} 

eşdeğer olduğunu düşünüyorum

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); 
    } 
} 

neden zaman uyumsuz bekliyoruz # hesaplama ifadeleri ise sadece f kadar güçlü olabilir Olmasına izin verildi.

cevap

0

Ben (şimdilik) hiçbir tahmin ediyorum:

derleyici nasılsa inşa etmek ve geri dönmek için somut bir araya kodunuzu dikiş vardır. IObservable<T> bir tür değil, bu yüzden derleyici bunu yapılandıramaz. Ayrıca

, Release Notes 7.0 den:

yeni dil özelliği zaman uyumsuz yöntemler Görev, Görev ve hükümsüz ek olarak diğer türlerini döndürebilir anlamına gelir. İade edilen tip hala async modelini sağlamalıdır, yani GetAwaiter metodu erişilebilir olmalıdır. Birisi IObservable<T> uygulamak ve aynı zamanda Görev API gereklerini yerine edecek bir ObservableTask<T> falan kuramayacağını söylemek değildir

. Bu henüz yapılmadı (henüz).

Hala uyumsuzluğu sorununu olurdu: Task<T> etrafında 0-1 T nesneleri IObservable<T> döner 0-n T nesneler dönen etrafında döner.

İlgili konular