.NET Reaktif Çerçevesine iyi giriş [kapalı]


218

Microsoft belgelerinin yanı sıra, Microsoft Reactive (Rx) çerçevesine iyi bir giriş ve öğretici var mı?

Ayrıca, Reaktif'in geleneksel asenkron kodlama tekniklerini kullanarak çözülmesi zor olan bir programlama problemini kolaylaştıran iyi bir örnek (kodlu) nedir?


Aramaya devam ediyorum - en iyi ne için kullanıldığına dair iyi bir fikrim olmadan önce birçok örnek görmem gerekecek.
Sam Harwell


Yanıtlar:


97

GÜNCELLEME : Aşağıdaki blog yayınlarının yerini çevrimiçi kitabım www.IntroToRx.com aldı . 19 bölümden oluşan ücretsiz bir kitaptır. Web'de gezinebilir veya kibarınız için mobi sürümünü indirebilirsiniz. Ayrıca doğrudan Amazon'dan küçük bir ücret karşılığında alabilirsiniz (~ 99c / 77p). Kitap ihtiyaçlarınızı veya beklentilerinizi karşılamıyorsa bana bildirin (Yazar) ve v2 için daha iyisini yapacağız.

Sıcak / Soğuk gönderinin bağlantısı için teşekkürler. Bu, tüm dizinin yalnızca bir bölümü ,

  1. Rx'e Giriş
  2. Statik ve uzatma yöntemleri
  3. Ömür boyu yönetim - Tamamlama ve Abonelikten Çıkma
  4. Akış kontrolü
  5. Birden fazla IObservable akışını birleştirme
  6. Zamanlama ve iş parçacığı
  7. Sıcak ve Soğuk gözlemlenebilir
  8. Test Rx
  9. Arabellek, Pencere, Birleştirme ve Grup Birleştirme

Bu blogu daha fazla Rx tanıtım öğesi ile güncellemeye devam edeceğim.

Daha gelişmiş şeyler için Rx Forumuna (MSDN) gitmek istiyorsunuz .


7
Ayaklarımı Rx hakkında öğrenmeye sürükledim çünkü tüm öğrenme materyalleri video biçiminde. Bu metin tabanlı kaynağı sağlamak için +1.
Daniel Schilling

Bu bağlantının öldüğünü sayın.
Maslow

2
Yaşasın Bu bağlantıyı numaralandır
Tam Zamanlı İskelet

1
James (EnumerateThis) ile çalışıyorum ve yıllar içinde ona dokunmadı. Onu canlandırmak için zaman ya da iştahı yok gibi görünüyor
Lee Campbell

85

İşte .NET Rx çerçevesinin farklı özelliklerinin nasıl kullanılacağını gösteren birçok kod örneği içeren bir wiki sitesi: http://rxwiki.wikidot.com/101samples

Bunu en kapsamlı site olarak buldum ve başlamak için en hızlı site.


12
Bu wiki'yi söyleyebildiğim kadarıyla size hangi referansın dahil edileceğini söylemek kadar değil. Bu oldukça ... sinir bozucu.
George Mauer

umm sadece dll'leri ekleyin ve nesne gezgini açın ve sınıfı arayın. Tabii ki Visual Studio'da sağ tıklama bağlam menüsü de yardımcı oluyor
Joe

62

Rx-Framework için MSDN Sitesi

Bir Geliştiricinin daha derine inmesi için Kaynak Kodu

Rx hakkında harika Avusturyalı açılış konuşması

Bu gördüğüm en iyisi: DevCamp 2010 Keynote - Rx: Eşzamansız programlama blues'unuzu tedavi etme

Kanal 9'daki bazı ilginç Videolar

Kim Hamilton ve Wes Dyer: BCL'de .NET Rx ve IObservable / IObserver (VS 2010)

Rx'in yaratıcısı: Uzmandan Uzmana röportaj : Brian Beckman ve Erik Meijer - .NET Reaktif Çerçevesinin İçinde (Rx)

Rx'in yaratıcısından bir tanıtım

CodeProject Makalesi

Bağlantılı başka bir ders ilk blogu (yeni)


5
+1 Bu videoları tavsiye ederim, LOT öğrendim, ayrıca Bart De Smet'in IQueryable ve IQbservable'daki videolarına da göz atın, Rx'in iç kısımlarını daha iyi anlıyorsunuz.
gideon

1
"DevCamp 2010 açılış konuşması" videosu için tam örnek proje burada: bartdesmet.net/download/Rx40Samples.zip
Omer Raviv

16

İşte reaktif programlama ile yapılması kolay, ancak klasik olaylarla dağınık (zorlu değilse), fare düğmesi basılıyken çizgiler çiziyor. Okunabilir, açık bir işlem yoktur:

var pen = new Pen(Color.Red, 3);
var graphics = this.CreateGraphics();

var mouseMoveWhileDown = 
    from md in this.GetMouseDown()
    from mv in this.GetMouseMove().Until(this.GetMouseUp())
    select new Point(mv.X, mv.Y);

mouseMoveWhileDown
    .Pairwise()
    .Subscribe(tup => graphics.DrawLine(pen, tup.Item1, tup.Item2)); 

(İtiraf etmeliyim ki, bu örnekte Pairwise () evde yetiştirilmektedir ...)

IObservable ile ilgili en önemli şey, tıpkı IEnumerable gibi 'birleştirilebilir' olmasıdır.

Başka bir cevapta belirtilen videoyu iyice tavsiye ederim. Aslında Kanal9'da konuyla ilgili birkaç farklı video var:


Nereden geliyorsa, asla kullanamam, bir referansı kaçırmam gerekiyor
TimothyP

1
@TimothyP, bence eski bir sürüme geri dönüş olabilir. Bunu ya da kendimi yazdım (o sırada IObservable uzatma yöntemlerini uygulamakla oynuyordum). Görebildiğim kadarıyla, reaktif uzantıların en son sürümü TakeUntiliyi bir uyum gibi görünen bir yöntem var .
Benjol

Bu, Rx'in ruhunu gösteren harika bir örnektir. Teşekkürler.
Dan Abramov

Pairwise () uygulamasını paylaşabilir misiniz?
blaster

1
@blaster, bu nasıl uygulama hakkında: var pairwise = source.Zip(source.Skip(1), (x, y) => new Tuple(x, y)).
MisterMetaphor




4

Tuhaf bir şekilde, Reaktif Uzantılar ana sayfası bir düzine videoya ve blog'a bağlantı veriyor, ancak kapsamlı resmi referans belgelerine bağlanmayı unutuyor. Bu ağlayan bir utanç, takımı tanıyorsanız, lütfen web sitelerini düzeltmelerini isteyin!


3

Farklı birleştiricilerin ne anlama geldiğini çok sezgisel bir şekilde görmek için Rx Sandbox ile oynayın . Bu gördüğüm en iyi öğrenme aracı.



2

İkinci soruyu cevaplamak için, burada Rx'den çok fayda sağlayabilecek bir sorun var. Buna "Çabuk zengin ol" denir.

Aynı isimle bir oyun geliştirdiniz ve oldukça iyi satıyor. Ancak sadece toptan satış için mağazalarınızda mevcuttur. Nakit işlemeyi kolaylaştırmak için, size doğru giden bir taşıma bandınız var.

(Lütfen yukarıdaki hikayeyi değiştirmekten çekinmeyin :))

Satış görevlileri, tomardaki fatura tutarını ve türünü belirten hiçbir etiket olmadan bağlı paralar yerleştirir. İşiniz parayı sıralamak ve saymaktır. Daha sonra, daha fazla para aldığınızda, size yardımcı olması için başkalarını işe alabilirsiniz.

Bu durumda, kaynak asenkron bir tomar para kaynağıdır (Yapımcı). Çalışanlarınız ve tedarikçileriniz para beklemektedir, ancak wad'ları tüketmeniz, paketlerini açmanız ve ödemeye uygun şekilde yeniden paketlemek için özel iş mantığınızı kullanmanız gerekir.

Satış görevlileri kendi iplikleri üzerinde çalışıyorlar, böylece kemere ne attıklarını saymanızı beklemek zorunda değiller. Zamanınız en iyi şekilde, daha fazla paranın sayılabileceği söylenirse, o zamana kadar başka işler yapabilirsiniz.

Her bir wad'ı bir bayt [] ile temsil edebilirsiniz.

Bu oldukça yaygın bir gerçek dünya durumudur; bir ağdaki herhangi bir kaynağı (örneğin, arama motorları, resimler veya videolar için web sayfaları) veya çevre birimlerinden veri aldığınızda, bunları bayt yığınlarına (muhtemelen üstbilgilere sahip) alırsınız. Tek bir iş parçacığında veya çalışmak çok zor olan çok iş parçacıklı bir ortamda, bunları toplama ve işleme eğilimindesiniz. Artık değil!!


bu sadece bazı üreticiler (satış elemanları) OnNext'i aynı IObserver <T> üzerinde çağırıyor ve daha sonra tüketici abone oluyor ancak bunun üretildiği yere farklı bir iş parçacığında (OnNext) gözlemlediğinden emin oluyor.
Lee Campbell



1

Andreas Hoffmann'ın bağlantılarına ek olarak (Rx öğrenirken onları çok yararlı buldum)

İşte Bart De Smet (bazı şeyleri gerçekten iyi açıklayan ÇOK akıllı bir adam) videoları:

Biraz Rx:
Rx üzerinden - Asenkron Programlama Blues tedavi

Bazı kanlı içler + bazı felsefe, bu videolar gerçekten aydınlatıcı:
Min LINQ - LINQ'nun özü
(Yukarıdaki video, LINQ'nun Rx gibi diğer şeylerle nasıl ilişkili olduğu ile ilgilidir)

IQbservable Üzerine Gözlemler - IQueryable'ın Çifti



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.