Giới thiệu tốt về .NET Reactive Framework [đã đóng]


218

Ngoài tài liệu của Microsoft, có phần giới thiệu và hướng dẫn tốt về khung Microsoft Reactive (Rx) không?

Ngoài ra, một ví dụ hay (có mã) là gì mà Reactive làm cho vấn đề lập trình trở nên dễ dàng hơn để giải quyết bằng cách sử dụng các kỹ thuật mã hóa không đồng bộ thông thường?


Tôi tiếp tục tìm kiếm - tôi sẽ cần xem rất nhiều ví dụ trước khi tôi có ý tưởng hay về việc nó được sử dụng tốt nhất cho mục đích gì.
Sam Harwell

4
Tôi đã xây dựng một bản demo nhỏ tìm kiếm Bing trực tiếp trong WPF với Rx: blog.andrei.rinea.ro/2013/06/01/ Kẻ
Andrei Rînea

5
Tôi trả lời chính xác câu hỏi này trong một loạt các bài đăng trên blog của mình: Rehansaeed.co.uk/reactive-extensions-part1-replaces-events
Muhammad Rehan Saeed

Câu trả lời:


97

CẬP NHẬT : Các bài đăng blog dưới đây đã được thay thế bởi cuốn sách trực tuyến của tôi www.IntroToRx.com . Nó là một cuốn sách 19 chương toàn diện có sẵn miễn phí. Bạn có thể duyệt nó trên web hoặc tải xuống phiên bản mobi cho bạn. Bạn cũng có thể lấy nó trực tiếp từ Amazon với một khoản phí nhỏ (~ 99c / 77p). Nếu cuốn sách không đáp ứng nhu cầu hoặc mong đợi của bạn, hãy cho tôi (Tác giả) biết và chúng tôi sẽ làm tốt hơn cho v2.

Cảm ơn các liên kết đến bài viết nóng / lạnh. Đây chỉ là một phần của bộ đầy đủ ,

  1. Giới thiệu về Rx
  2. Phương pháp tĩnh và mở rộng
  3. Quản lý trọn đời - Hoàn thành và hủy đăng ký
  4. Kiểm soát lưu lượng
  5. Kết hợp nhiều luồng IObservable
  6. Lập kế hoạch và phân luồng
  7. Đài quan sát nóng và lạnh
  8. Kiểm tra Rx
  9. Bộ đệm, Cửa sổ, Tham gia và Tham gia nhóm

Tôi sẽ tiếp tục cập nhật blog này với nhiều thứ giới thiệu Rx hơn.

Đối với nội dung nâng cao hơn bạn muốn truy cập Diễn đàn Rx (MSDN).


7
Tôi đã kéo chân mình học về Rx vì tất cả các tài liệu học tập đều ở dạng video. +1 để cung cấp tài nguyên dựa trên văn bản này.
Daniel Schilling

Liệt kê liên kết này là chết.
Maslow

2
Sống lâu liệt kê liên kết này
Bộ xương toàn thời gian

1
Tôi làm việc với James (Enum Cả This) và anh ấy đã không chạm vào nó trong nhiều năm. Anh ta dường như không có thời gian hay sự thèm ăn để hồi sinh nó
Lee Campbell

85

Đây là một trang wiki có rất nhiều ví dụ mã trình bày cách sử dụng các tính năng khác nhau của khung .NET Rx: http://rxwiki.wikidot.com/101samples

Tôi thấy đây là trang web toàn diện nhất ngoài kia và là trang nhanh nhất để bắt đầu.


12
Theo như tôi có thể nói thì wiki này không có gì nhiều bằng việc cho bạn biết nên tham khảo. Điều này khá ... bực bội.
George Mauer

umm chỉ cần thêm các dll và mở thám hiểm đối tượng và tìm kiếm lớp. tất nhiên, menu ngữ cảnh nhấp chuột phải trong Visual studio cũng giúp
Joe

62

Trang web MSDN cho Rx-Framework

Đối với Nhà phát triển đi sâu hơn, Mã nguồn

Bài phát biểu tuyệt vời của Áo về Rx

Đây là thứ tốt nhất tôi từng thấy: DevCamp 2010 Keynote - Rx: Chữa các lỗi lập trình không đồng bộ của bạn

Một số video thú vị trên Kênh 9

Kim Hamilton và Wes Dyer: Bên trong .NET Rx và IObservable / IObserver trong BCL (VS 2010)

Một cuộc phỏng vấn với người sáng tạo từ Rx: Expert to Expert: Brian Beckman và Erik Meijer - Inside the .NET Reactive Framework (Rx)

Giới thiệu từ người tạo ra Rx

Một CodeProject Điều

Một khóa học đầu tiên blog với các liên kết (mới)


5
+1 Rất khuyến khích những video này, tôi đã học được RẤT NHIỀU, cũng xem một số video của Bart De Smet trên IQueryable và IQbservable, Bạn hiểu rõ hơn về bên trong của Rx.
gideon

1
Dự án mẫu hoàn chỉnh cho video "DevCamp 2010 keynote" có tại đây: bartdesmet.net/doad/Rx40Samples.zip
Omer Raviv

16

Đây là một ví dụ về một thứ dễ thực hiện với lập trình phản ứng, nhưng lộn xộn (nếu không thử thách) với các sự kiện cổ điển, nó vẽ các đường trong khi nút chuột không hoạt động. Nó có thể đọc được, không có xử lý trạng thái rõ ràng:

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

(Tôi phải thú nhận rằng trong ví dụ đó, Pairwise () được trồng tại nhà ...)

Điều quan trọng nhất về IObservable là nó có thể kết hợp được, giống như IEnumerable.

Tôi chắc chắn đề nghị video được đề cập trong một câu trả lời khác. Trên thực tế, có một số video khác nhau về chủ đề trên Kênh9:


Trường hợp này đến từ đâu, tôi không bao giờ có thể sử dụng nó, tôi phải thiếu một tài liệu tham khảo
TimothyP

1
@TimothyP, tôi nghĩ rằng nó có thể là một phiên bản cũ cho phiên bản cũ. Điều đó hoặc tôi đã tự viết một cái (tôi đang chơi với việc thực hiện các phương pháp mở rộng IObservable tại thời điểm đó). Từ những gì tôi có thể thấy, phiên bản mới nhất của tiện ích mở rộng phản ứng có một phương thức được gọi là TakeUntil, có vẻ như phù hợp.
Stewol

Đây là một ví dụ tuyệt vời cho thấy tinh thần của Rx. Cảm ơn.
Dan Abramov

Bạn có thể chia sẻ việc thực hiện Pairwise () không?
blaster

1
@blaster, làm thế nào về việc thực hiện này : var pairwise = source.Zip(source.Skip(1), (x, y) => new Tuple(x, y)).
MisterMetaphor




4

Thật kỳ lạ, trang chủ Reactive Extension liên kết đến hàng tá video và blog nhưng quên liên kết đến tài liệu tham khảo chính thức toàn diện. Đó là một sự xấu hổ khóc, nếu bạn biết nhóm, xin vui lòng yêu cầu họ sửa chữa trang web của họ!


3

Chơi với Rx Sandbox để có cái nhìn rất trực quan về ý nghĩa của các tổ hợp khác nhau. Đây là công cụ học tập tốt nhất mà tôi đã thấy.



2

Để trả lời câu hỏi thứ hai, đây là một vấn đề có thể mang lại lợi ích rất nhiều từ Rx. Nó được gọi là "Làm giàu nhanh chóng".

Bạn đã phát triển một trò chơi cùng tên và nó bán khá chạy. Nhưng nó chỉ có sẵn tại các cửa hàng của bạn để bán buôn. Để làm cho việc xử lý tiền mặt dễ dàng hơn, bạn có một băng chuyền chảy về phía bạn.

(Xin vui lòng thay đổi câu chuyện ở trên :))

Nhân viên bán hàng đặt các tờ tiền mặt bị ràng buộc vào đó mà không có nhãn cho biết số lượng và loại hóa đơn trong mốt. Công việc của bạn là sắp xếp và đếm tiền. Sau này, khi bạn nhận được nhiều tiền hơn, bạn có thể thuê người khác giúp bạn.

Trong trường hợp này, nguồn là một nguồn không đồng bộ của tiền mặt (Nhà sản xuất). Nhân viên và nhà cung cấp của bạn mong đợi tiền, nhưng bạn phải tiêu thụ mớ, giải nén chúng và sử dụng logic kinh doanh tùy chỉnh của bạn để đóng gói lại khi thích hợp để trả cho họ.

Những người bán hàng đang chạy theo chủ đề riêng của họ, để họ không phải chờ bạn đếm những gì họ ném vào thắt lưng. Thời gian của bạn được tận dụng tốt nhất nếu bạn được thông báo khi có nhiều tiền hơn để đếm, cho đến lúc đó bạn có thể làm công việc khác.

Bạn có thể biểu diễn mỗi wad bằng một byte [].

Đây là một tình huống thực tế khá phổ biến; khi bạn truy xuất bất kỳ tài nguyên nào [ví dụ: các trang web cho công cụ tìm kiếm, hình ảnh hoặc video] trên mạng hoặc dữ liệu từ các thiết bị ngoại vi, bạn sẽ nhận được chúng trong các byte (có thể có tiêu đề). Trong một luồng đơn hoặc trong môi trường đa luồng quá khó để làm việc, bạn có xu hướng tổng hợp và xử lý chúng. Không còn nữa !!


đây chỉ là một số nhà sản xuất (nhân viên bán hàng) gọi OnNext trên cùng một IObserver <T> và sau đó người tiêu dùng đăng ký nhưng đảm bảo rằng nó đang quan sát trên một luồng khác đến nơi nó được sản xuất (OnNext).
Lee Campbell



1

Ngoài các liên kết của Andreas Hoffmann (thấy chúng rất hữu ích khi tôi học Rx)

Dưới đây là một số Bart De Smet (một anh chàng thông minh RẤT giải thích mọi thứ thực sự tốt) Video:

Có thể chạy qua Rx:
Rx - Chữa cho Blues lập trình không đồng bộ của bạn

Một số thông tin bên trong + một số triết lý, những video này thực sự khai sáng:
Min LINQ - Bản chất của LINQ
(Video trên đề cập đến cách LINQ kinda liên quan đến những thứ khác, như Rx)

Quan sát về IQbservable - Dual of IQueryable


1

DEVHOL202 - Chữa các blues không đồng bộ bằng phần mở rộng Reactive cho .NET (PDF, 2 MB) là phòng thí nghiệm / hướng dẫn tốt nhất tôi từng thấy cho đến nay. Nó hướng dẫn bạn thông qua những điều cơ bản của thư viện, để bạn có thể xây dựng và thiết kế những gì bạn đã học.

Ngoài ra còn có một phiên bản JavaScript. Tìm kiếm trên Google cho "Phần mở rộng phản ứng trên tay phòng thí nghiệm".


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.