แนะนำให้รู้จักกับ. NET Reactive Framework [ปิด]


218

นอกเหนือจากเอกสารประกอบของ Microsoft แล้วยังมีบทนำและบทแนะนำที่ดีเกี่ยวกับกรอบการทำงานของ Microsoft Reactive (Rx) หรือไม่?

นอกจากนี้ยังมีตัวอย่างที่ดี (ที่มีรหัส) ที่ตอบสนองทำให้ง่ายขึ้นของปัญหาการเขียนโปรแกรมที่ท้าทายในการแก้ปัญหาโดยใช้เทคนิคการเข้ารหัสแบบอะซิงโครนัสทั่วไปคืออะไร?


ฉันดูต่อไป - ฉันจะต้องดูตัวอย่างมากมายก่อนที่ฉันจะมีความคิดที่ดีว่าอะไรที่ใช้ดีที่สุด
Sam Harwell

4
ฉันสร้างตัวอย่างเล็ก ๆ ของการค้นหา Bing แบบสดใน WPF ด้วย Rx: blog.andrei.rinea.ro/2013/06/01/…
Andrei Rînea

5
ฉันตอบคำถามนี้ในชุดของโพสต์ในบล็อกของฉัน: rehansaeed.co.uk/reactive-extensions-part1-replacing-events
Muhammad Rehan Saeed

คำตอบ:


97

UPDATE : บล็อกโพสต์ด้านล่างได้รับการแทนที่โดยหนังสือออนไลน์ของฉันwww.IntroToRx.com มันเป็นหนังสือที่ครอบคลุม 19 บทที่มีให้ฟรี คุณสามารถเรียกดูได้บนเว็บหรือดาวน์โหลดรุ่น mobi สำหรับจุดไฟของคุณ คุณสามารถรับโดยตรงจาก Amazon ด้วยค่าใช้จ่ายเล็กน้อย (~ 99c / 77p) หากหนังสือเล่มนี้ไม่ตรงกับความต้องการหรือความคาดหวังของคุณให้ฉัน (ผู้เขียน) รู้และเราจะทำดีกว่าสำหรับ v2

ขอบคุณสำหรับลิงค์ไปยังโพสต์ที่น่าสนใจ นี้เป็นเพียงส่วนหนึ่งของชุดเต็มรูปแบบ ,

  1. รู้เบื้องต้นเกี่ยวกับ Rx
  2. วิธีการคงที่และการขยาย
  3. การจัดการอายุการใช้งาน - การดำเนินการให้เสร็จและยกเลิกการเป็นสมาชิก
  4. การควบคุมการไหล
  5. การรวมหลายสตรีม IObservable
  6. การจัดตารางเวลาและเธรด
  7. ข้อสังเกตร้อนและเย็น
  8. ทดสอบ Rx
  9. บัฟเฟอร์, หน้าต่าง, เข้าร่วมและเข้าร่วมกลุ่ม

ฉันจะอัปเดตบล็อกนี้ต่อไปโดยมีสิ่งแนะนำ Rx เพิ่มเติม

สำหรับข้อมูลขั้นสูงเพิ่มเติมคุณต้องการไปที่Rx Forum (MSDN)


7
ฉันลากเท้าของฉันเรียนรู้เกี่ยวกับ Rx เพราะสื่อการเรียนรู้ทั้งหมดอยู่ในรูปแบบของวิดีโอ +1 สำหรับการจัดหาทรัพยากรที่เป็นข้อความ
Daniel Schilling

ระบุการเชื่อมโยงนี้จะตาย
Maslow

2
อายุการใช้งานที่ยาวนานระบุลิงก์นี้
เต็มเวลาโครงกระดูก

1
ฉันทำงานกับเจมส์ (EnumerateThis) และเขาก็ไม่ได้แตะต้องมันมาหลายปี ดูเหมือนว่าเขาจะไม่มีเวลาหรือความอยากอาหารที่จะฟื้นฟูมัน
Lee Campbell

85

นี่คือเว็บไซต์วิกิที่มีตัวอย่างโค้ดจำนวนมากที่แสดงให้เห็นถึงวิธีการใช้คุณสมบัติต่าง ๆ ของ. NET Rx framework: http://rxwiki.wikidot.com/101samples

ฉันพบว่านี่เป็นไซต์ที่ครอบคลุมที่สุดและเป็นไซต์ที่เริ่มต้นได้เร็วที่สุด


12
เท่าที่ฉันสามารถบอกได้ว่าวิกินี้ไม่มากเท่าที่จะบอกคุณว่าควรใช้การอ้างอิงใด ซึ่งค่อนข้าง ... น่าหงุดหงิด
George Mauer

อืมเพียงแค่เพิ่มที่กำลังและเปิดวัตถุสำรวจและค้นหาชั้นเรียน แน่นอนว่าเมนูบริบทคลิกขวาใน Visual Studio ก็ช่วยได้เช่นกัน
Joe

62

ไซต์ MSDN สำหรับRx-Framework

สำหรับนักพัฒนาที่ลึกลงไปซอร์สโค้ด

สุดยอดประเด็นสำคัญออสเตรียเกี่ยวกับ Rx

นี่คือสิ่งที่ดีที่สุดที่ฉันเคยเห็น: DevCamp 2010 Keynote - Rx: การบลูส์การเขียนโปรแกรมแบบอะซิงโครนัสของคุณ

วิดีโอที่น่าสนใจในช่อง 9

Kim Hamilton และ Wes Dyer: Inside .NET Rx และ IObservable / IObserver ใน BCL (VS 2010)

บทสัมภาษณ์ผู้สร้างจาก Rx: Expert to Expert: Brian Beckman และ Erik Meijer - ภายใน. NET Reactive Framework (Rx)

การแนะนำจากผู้สร้างของ Rx

บทความ Codeproject

บล็อกแรกของ หลักสูตรอื่นที่มีลิงก์(ใหม่)


5
+1 แนะนำวิดีโอเหล่านี้มากฉันได้เรียนรู้มากมายลองดูวิดีโอของ Bart De Smet บางเรื่องเกี่ยวกับ IQueryable และ IQbservable คุณจะเข้าใจวงในของ Rx ได้ดียิ่งขึ้น
gideon

1
ตัวอย่างโครงการที่สมบูรณ์สำหรับวิดีโอ "คำปราศรัย DevCamp 2010" อยู่ที่นี่: bartdesmet.net/download/Rx40Samples.zip
Omer Raviv

16

นี่คือตัวอย่างของสิ่งที่ง่ายในการเขียนโปรแกรมแบบโต้ตอบ แต่ยุ่ง (ถ้าไม่ท้าทาย) กับกิจกรรมแบบคลาสสิกมันจะลากเส้นในขณะที่ปุ่มเมาส์ค้าง มันสามารถอ่านได้ไม่มีการจัดการสถานะที่ชัดเจน:

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

(ฉันต้องยอมรับว่าในตัวอย่างนั้น Pairwise () เป็นบ้านปลูก ... )

สิ่งที่สำคัญที่สุดเกี่ยวกับ IObservable คือมันเป็น 'composable' เช่นเดียวกับ IEnumerable

ฉันขอแนะนำวิดีโอที่กล่าวถึงในคำตอบอื่น อันที่จริงมีวิดีโอหลายเรื่องในหัวข้อที่ช่อง 9:


ฉันไม่สามารถใช้มันได้ฉันต้องพลาดการอ้างอิง
TimothyP

1
@ TimothyP ฉันคิดว่ามันอาจเป็นการย้อนกลับของเวอร์ชั่นเก่ากว่า หรือฉันเขียนเอง (ฉันเล่นโดยใช้วิธีการส่วนขยาย IObservable ในเวลานั้น) จากสิ่งที่ฉันเห็นส่วนขยายรีแอคทีฟเวอร์ชันล่าสุดมีวิธีการTakeUntilซึ่งเรียกว่าพอดี
Benjol

นี่เป็นตัวอย่างที่ยอดเยี่ยมที่แสดงให้เห็นถึงจิตวิญญาณของ Rx ขอบคุณ
Dan Abramov

คุณสามารถแบ่งปันการใช้งาน Pairwise () ได้หรือไม่?
blaster

1
@blaster var pairwise = source.Zip(source.Skip(1), (x, y) => new Tuple(x, y))วิธีการเกี่ยวกับการดำเนินงานนี้:
MisterMetaphor


4

คุณอาจพบชุดของบทความ (มีสี่) เกี่ยวกับปฏิกิริยา LINQ ที่มีประโยชน์นี้: ปฏิกิริยาการเขียนโปรแกรม - แนะนำปฏิกิริยา LINQ

เขามีตัวอย่างของการเขียนเกมที่ใช้มันดังนั้นหวังว่ามันจะเป็นสิ่งที่คุณกำลังมองหา



4

โดยปกติหน้าแรกของส่วนต่อขยายที่มีปฏิกิริยาเชื่อมโยงกับวิดีโอและบล็อกโหล แต่ลืมที่จะเชื่อมโยงไปยังเอกสารอ้างอิงอย่างเป็นทางการที่ครอบคลุม นั่นเป็นความอัปยศร้องไห้หากคุณรู้จักทีมโปรดขอให้พวกเขาแก้ไขเว็บไซต์ของพวกเขา!


3

เล่นกับRx Sandboxเพื่อรับมุมมองที่เข้าใจง่ายมากเกี่ยวกับความหมายของ combinators นี่เป็นเครื่องมือการเรียนรู้ที่ดีที่สุดที่ฉันเคยเห็น


2

อ่านบทความเหล่านี้โดยเฉพาะดาวน์โหลดซอร์สโค้ดที่เกี่ยวข้องและเล่นกับมัน

เชื่อใจว่าสิ่งนี้จะช่วยได้


2

เพื่อตอบคำถามที่สองนี่เป็นปัญหาที่สามารถได้รับประโยชน์มากมายจาก Rx มันเรียกว่า "รวยทันใจ"

คุณพัฒนาเกมโดยใช้ชื่อเดียวกันและขายได้ดี แต่จะมีให้เฉพาะที่ร้านค้าของคุณเพื่อการขายส่งเท่านั้น เพื่อให้การประมวลผลเงินสดง่ายขึ้นคุณมีสายพานลำเลียงที่ไหลเข้าหาตัวคุณ

(โปรดเปลี่ยนเรื่องราวด้านบน :))

พนักงานขายวางเงินสดที่ถูกผูกไว้กับมันโดยไม่มีป้ายระบุจำนวนเงินและประเภทของตั๋วเงินในปึก งานของคุณคือการจัดเรียงและนับเงิน ต่อมาเมื่อคุณได้รับเงินมากขึ้นคุณสามารถจ้างคนอื่นมาช่วยคุณได้

ในกรณีนี้แหล่งที่มาคือแหล่งที่มาของกระแสเงินสด (ผู้ผลิต) แบบอะซิงโครนัส พนักงานและซัพพลายเออร์ของคุณคาดหวังว่าจะได้รับเงิน แต่คุณต้องใช้กระดาษเช็ดทำความสะอาดบรรจุภัณฑ์และใช้ตรรกะทางธุรกิจที่กำหนดเองเพื่อบรรจุหีบห่อตามความเหมาะสมเพื่อชำระเงิน

คนขายกำลังวิ่งด้ายของตัวเองเพื่อที่พวกเขาจะได้ไม่ต้องรอให้คุณนับสิ่งที่พวกเขาโยนบนสายพาน เวลาของคุณจะถูกนำไปใช้อย่างคุ้มค่าที่สุดถ้าคุณถูกบอกว่าเมื่อมีเงินเหลือให้นับจนกว่าคุณจะสามารถทำงานอื่นได้

คุณสามารถแทนแต่ละปึกด้วยไบต์ []

นี่เป็นสถานการณ์ในโลกแห่งความเป็นจริงที่ค่อนข้างธรรมดา เมื่อคุณดึงทรัพยากรใด ๆ (ตัวอย่างเช่นหน้าเว็บสำหรับเครื่องมือค้นหารูปภาพหรือวิดีโอ) บนเครือข่ายหรือข้อมูลจากอุปกรณ์ต่อพ่วงคุณจะได้รับในหน่วยไบต์ (อาจมีส่วนหัว) ในเธรดเดียวหรือในสภาพแวดล้อมแบบมัลติเธรดที่ยากเกินไปที่จะทำงานด้วยคุณมักจะรวมและประมวลผลเธรดเหล่านั้น ไม่อีกแล้ว!!


นี่เป็นเพียงผู้ผลิต (พนักงานขาย) ที่เรียกใช้ OnNext บน IObserver <T> เดียวกันจากนั้นผู้บริโภคที่สมัครใช้งาน แต่ต้องแน่ใจว่าพวกเขากำลังสังเกตดูเธรดที่แตกต่างไปจากที่ที่มันถูกสร้างขึ้น (OnNext)
Lee Campbell


1

ส่วนคำสั่ง "ยกเว้นเอกสาร Microsoft" ของคุณขยายไปถึงวิดีโอในช่อง 9 หรือไม่

จากผู้สร้างเฟรมเวิร์กปฏิกิริยา Erik Meijer: - ผู้เชี่ยวชาญถึงผู้เชี่ยวชาญ: Brian Beckman และ Erik Meijer - ภายใน. NET Reactive Framework (Rx)

ใหม่ : เริ่มต้นใช้งาน Rx Extensions สำหรับ. NET



1

นอกจากลิงค์ของ Andreas Hoffmann (พบว่ามีประโยชน์มากเมื่อฉันเรียน Rx)

นี่คือบางส่วนของ Bart De Smet (เป็นคนฉลาดมากที่อธิบายสิ่งต่าง ๆ ได้ดี) วิดีโอ:

ขอให้ดำเนินการผ่าน Rx:
Rx - บ่มการเขียนโปรแกรมบลูทู ธ แบบอะซิงโครนัสของคุณ

บางสิ่งที่เต็มไปด้วยเลือด + ปรัชญาบางส่วนวิดีโอเหล่านี้ให้ความกระจ่าง:
Min LINQ - สาระสำคัญของ LINQ
(วิดีโอด้านบนเกี่ยวข้องกับวิธีที่ LINQ เกี่ยวข้องกับสิ่งอื่น ๆ เช่น Rx)

การสังเกตการณ์บน IQbservable - Dual of IQueryable


1

DEVHOL202 - การรักษาบลูส์แบบอะซิงโครนัสด้วย Reactive Extensions for .NET (PDF, 2 MB) เป็นแล็บ / กวดวิชาที่ดีที่สุดที่ฉันเคยเห็นมา มันจะแนะนำคุณเกี่ยวกับพื้นฐานของไลบรารีเพื่อให้คุณสามารถสร้างและออกแบบสิ่งที่คุณได้เรียนรู้

นอกจากนี้ยังมีรุ่น JavaScript ค้นหาโดย Google สำหรับ "ส่วนขยายปฏิกิริยาบนแล็บ"


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.