Pengantar yang bagus untuk .NET Reactive Framework [ditutup]

218

Selain dokumentasi Microsoft, adakah pengantar dan tutorial yang bagus untuk kerangka kerja Microsoft Reactive (Rx)?

Juga, apa contoh yang baik (dengan kode) yang Reactive mempermudah masalah pemrograman yang sulit dipecahkan dengan menggunakan teknik pengkodean asinkron konvensional?

LBushkin
sumber
Saya terus mencari - saya harus melihat banyak contoh sebelum saya memiliki ide yang baik untuk apa.
Sam Harwell
4
Saya membuat demo kecil pencarian Bing langsung di WPF dengan Rx: blog.andrei.rinea.ro/2013/06/01/...
Andrei Rînea
5
Saya menjawab pertanyaan ini persis dalam serangkaian posting di blog saya: rehansaeed.co.uk/reactive-extensions-part1-replacing-events
Muhammad Rehan Saeed

Jawaban:

97

UPDATE : Posting blog di bawah ini telah digantikan oleh buku online saya www.IntroToRx.com . Ini adalah buku 19 bab komprehensif yang tersedia secara gratis. Anda dapat menjelajahinya di web, atau mengunduh versi mobi untuk menyalakan Anda. Anda juga bisa mendapatkannya langsung dari Amazon dengan biaya kecil (~ 99c / 77p). Jika buku tidak memenuhi kebutuhan atau harapan Anda, beri tahu saya (Penulis) dan kami akan melakukan yang lebih baik untuk v2.

Terima kasih atas tautannya ke pos Panas / Dingin. Ini hanya satu bagian dari seri lengkap ,

  1. Pengantar Rx
  2. Metode statis dan ekstensi
  3. Manajemen seumur hidup - Menyelesaikan dan Berhenti Berlangganan
  4. Alur kontrol
  5. Menggabungkan beberapa aliran IObservable
  6. Penjadwalan dan threading
  7. Panas dan Dingin yang bisa diamati
  8. Menguji Rx
  9. Buffer, Window, Gabung dan Gabung Grup

Saya akan terus memperbarui blog ini dengan lebih banyak hal pengantar Rx.

Untuk hal-hal lebih lanjut, Anda ingin pergi ke Forum Rx (MSDN).

Lee Campbell
sumber
7
Saya telah menyeret kaki saya untuk belajar tentang Rx karena semua materi pembelajaran adalah dalam bentuk video. +1 untuk menyediakan sumber daya berbasis teks ini.
Daniel Schilling
Hitung tautan ini sudah mati.
Maslow
2
Seumur hidup Hitung tautan ini
Kerangka Waktu Penuh
1
Saya bekerja dengan James (EnumerateThis) dan dia tidak menyentuhnya selama bertahun-tahun. Dia sepertinya tidak punya waktu atau keinginan untuk menghidupkannya kembali
Lee Campbell
85

Berikut adalah situs wiki dengan banyak contoh kode yang menunjukkan cara menggunakan berbagai fitur kerangka .NET Rx: http://rxwiki.wikidot.com/101samples

Saya menemukan ini sebagai situs paling komprehensif di luar sana, dan yang paling cepat untuk memulai.

LBushkin
sumber
12
Sejauh yang saya tahu wiki ini tidak begitu banyak memberi tahu Anda referensi mana yang harus dimasukkan. Yang agak ... membuat frustrasi.
George Mauer
umm cukup tambahkan dll dan buka objek explorer dan cari kelasnya. tentu saja menu konteks klik kanan di Visual studio juga membantu
Joe
62

Situs MSDN untuk Rx-Framework

Untuk Pengembang yang lebih dalam, Kode Sumber

Keynote Austria keren tentang Rx

Ini adalah yang terbaik yang pernah saya lihat: DevCamp 2010 Keynote - Rx: Menyembuhkan blues pemrograman asinkron Anda

Beberapa Video menarik di Saluran 9

Kim Hamilton dan Wes Dyer: Di dalam. NET Rx dan IObservable / IObserver di BCL (VS 2010)

Wawancara dengan pencipta dari Rx: Pakar ke Pakar: Brian Beckman dan Erik Meijer - Di dalam .NET Reactive Framework (Rx)

Pengantar dari pencipta Rx

Artikel Proyek Codep

Kursus blog pertama lain dengan tautan (baru)

Musim panas
sumber
5
+1 Sangat merekomendasikan video ini, saya belajar BANYAK, juga memeriksa beberapa video Bart De Smet tentang IQueryable dan IQbservable, Anda mendapatkan pemahaman yang lebih baik tentang bagian dalam Rx.
gideon
1
Proyek sampel lengkap untuk video "DevCamp 2010 keynote" ada di sini: bartdesmet.net/download/Rx40Samples.zip
Omer Raviv
16

Berikut ini adalah contoh dari sesuatu yang mudah dilakukan dengan pemrograman reaktif, tetapi berantakan (jika tidak menantang) dengan acara klasik, itu menarik garis saat tombol mouse mati. Dapat dibaca, tidak ada penanganan eksplisit:

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

(Saya harus mengakui bahwa dalam contoh itu, Pairwise () adalah buatan sendiri ...)

Hal yang paling penting tentang IObservable adalah bahwa IObservable itu 'dapat dikompilasi', seperti halnya IEnumerable.

Saya merekomendasikan video yang disebutkan dalam jawaban lain. Bahkan ada beberapa video berbeda pada subjek di Channel9:

Benjol
sumber
Dari mana. Sampai tiba, saya tidak akan pernah bisa menggunakannya, saya pasti kehilangan referensi
TimothyP
1
@ TimothyP, saya pikir ini mungkin sebuah kemunduran ke versi yang lebih lama. Itu atau saya menulis sendiri (saya sedang bermain dengan menerapkan metode ekstensi IObservable pada saat itu). Dari apa yang dapat saya lihat, versi terbaru dari ekstensi reaktif memiliki metode yang disebut TakeUntil, yang sepertinya cocok.
Benjol
Ini adalah contoh yang luar biasa yang menunjukkan semangat Rx. Terima kasih.
Dan Abramov
Bisakah Anda membagikan implementasi Pairwise ()?
Blaster
1
@blaster, bagaimana implementasi ini: var pairwise = source.Zip(source.Skip(1), (x, y) => new Tuple(x, y)).
MisterMetaphor
4

Anda dapat menemukan seri artikel ini (ada empat) tentang LINQ reaktif yang berguna: Pemrograman reaktif (II.) - Memperkenalkan LINQ Reaktif .

Dia memiliki contoh menulis permainan menggunakan itu, jadi semoga itu menjadi apa yang Anda cari.

James Black
sumber
4

Anehnya, beranda Ekstensi Reaktif menghubungkan ke selusin video dan blog tetapi lupa untuk menautkan ke dokumentasi referensi resmi yang komprehensif. Sayang sekali, jika Anda tahu timnya, silakan minta mereka memperbaiki situs web mereka!

Kolonel Panic
sumber
3

Mainkan dengan Rx Sandbox untuk mendapatkan tampilan yang sangat intuitif tentang arti dari berbagai kombinator. Ini adalah alat belajar terbaik yang pernah saya lihat.

Omer Raviv
sumber
2

Untuk menjawab pertanyaan kedua, berikut adalah masalah yang bisa mendapatkan banyak manfaat dari Rx. Ini disebut "Cepat kaya".

Anda telah mengembangkan gim dengan nama yang sama dan laris manis. Tetapi hanya tersedia di toko Anda untuk grosir. Untuk mempermudah pemrosesan uang tunai, Anda memiliki ban berjalan yang mengalir ke arah Anda.

(Silahkan mengubah cerita di atas :))

Tenaga penjualan menempatkan gumpalan uang tunai terikat di atasnya tanpa label yang menunjukkan jumlah dan jenis tagihan dalam gumpalan. Pekerjaan Anda adalah menyortir dan menghitung uang. Kemudian, ketika Anda mendapatkan lebih banyak uang, Anda dapat mempekerjakan orang lain untuk membantu Anda.

Dalam hal ini, sumbernya adalah sumber uang tunai (Produser) yang tidak sinkron. Karyawan dan pemasok Anda mengharapkan uang, tetapi Anda harus mengkonsumsi gumpalan, membongkar mereka dan menggunakan logika bisnis khusus Anda untuk mengemas kembali sesuai untuk membayar mereka.

Orang-orang penjualan berjalan di utas mereka sendiri, sehingga mereka tidak perlu menunggu Anda untuk menghitung apa yang mereka lemparkan pada ikat pinggang. Waktu Anda paling baik digunakan jika Anda diberi tahu kapan lebih banyak uang tersedia untuk dihitung, sampai Anda dapat melakukan pekerjaan lain.

Anda bisa mewakili setiap gumpalan dengan byte [].

Ini adalah situasi dunia nyata yang cukup umum; ketika Anda mengambil sumber daya apa pun [misalnya, halaman web untuk mesin pencari, gambar atau video] pada jaringan atau data dari periferal, Anda mendapatkannya dalam potongan byte (mungkin dengan header). Dalam satu utas, atau dalam lingkungan multi-utas yang terlalu sulit untuk dikerjakan, Anda cenderung mengagregasi dan memprosesnya. Tidak lagi!!

Performa
sumber
ini hanya beberapa produsen (tenaga penjualan) yang memanggil OnNext pada IObserver yang sama <T> dan kemudian pelanggan berlangganan tetapi memastikan bahwa ia Mengamati pada utas yang berbeda ke tempat ia diproduksi (OnNext).
Lee Campbell
1

Selain tautan Andreas Hoffmann (menemukan mereka sangat membantu ketika saya belajar Rx)

Berikut adalah beberapa Video Bart De Smet (pria yang SANGAT pintar yang menjelaskan semuanya dengan sangat baik):

Agak dijalankan melalui Rx:
Rx - Curing Blues Pemrograman Asynchronous Anda

Sebagian berdarah dalam + filosofi, video ini benar-benar mencerahkan:
Min LINQ - Inti dari LINQ
(Video di atas membahas bagaimana LINQ agak terkait dengan hal-hal lain, Seperti Rx)

Pengamatan pada IQbservable - Dual of IQueryable

Gideon
sumber