.NET Reactive Framework에 대한 유용한 소개 [닫기]


218

Microsoft 설명서 외에도 Microsoft Reactive (Rx) 프레임 워크에 대한 유용한 소개와 자습서가 있습니까?

또한 Reactive가 기존 비동기 코딩 기술을 사용하여 해결하기 어려운 프로그래밍 문제를 쉽게 만드는 좋은 예 (코드 포함)는 무엇입니까?


나는 계속 찾고 있습니다-그것이 가장 잘 사용되는 것을 알기 전에 많은 예제를보아야 할 것입니다.
Sam Harwell

4
나는 수신와 WPF에서 라이브 빙 검색의 작은 데모를 내장 : blog.andrei.rinea.ro/2013/06/01/...
안드레이 Rînea

5
내 블로그에 게시물의 일련의 바로이 질문에 대답 : rehansaeed.co.uk/reactive-extensions-part1-replacing-events
무하마드 Rehan 사이드

답변:


97

업데이트 : 아래 블로그 게시물이 내 온라인 서적 www.IntroToRx.com에 의해 대체되었습니다 . 무료로 제공되는 포괄적 인 19 장 책입니다. 웹에서 찾아 보거나 킨들에 대한 mobi 버전을 다운로드 할 수 있습니다. 작은 비용 (~ 99c / 77p)으로 아마존에서 직접 구입할 수도 있습니다. 이 책이 귀하의 요구 나 기대를 충족시키지 못하면 저 (저자)에게 알려 주시면 v2를 위해 더 잘할 것입니다.

Hot / Cold 게시물에 대한 링크를 보내 주셔서 감사합니다. 이것은의 한 부분입니다 전체 시리즈 ,

  1. Rx 소개
  2. 정적 및 확장 방법
  3. 수명 관리 – 완료 및 구독 취소
  4. 흐름 제어
  5. 여러 IObservable 스트림 결합
  6. 스케줄링 및 스레딩
  7. 고온 및 저온 관측 가능
  8. Rx 테스트
  9. 버퍼, 창, 결합 및 그룹 결합

더 많은 Rx 소개 자료로이 블로그를 계속 업데이트하겠습니다.

보다 고급적인 내용을 보려면 Rx 포럼 (MSDN)으로 이동하십시오.


7
모든 학습 자료가 비디오 형식이기 때문에 Rx에 대해 배우면서 발을 끌었습니다. 이 텍스트 기반 리소스를 제공하는 +1
Daniel Schilling

이 링크가 죽었 음을 열거하십시오.
Maslow


1
나는 James (EnumerateThis)와 함께 일하고 있으며 몇 년 동안 만지지 않았습니다. 그는 그것을 부활시킬 시간이나 식욕이없는 것 같습니다
Lee Campbell

85

다음은 .NET Rx 프레임 워크의 다양한 기능을 사용하는 방법을 보여주는 많은 코드 예제가 포함 된 위키 사이트입니다. http://rxwiki.wikidot.com/101samples

이 사이트는 가장 포괄적 인 사이트이며 가장 빠른 사이트라는 것을 알았습니다.


12
내가이 위키에 말할 수있는 한 포함 할 참조를 알려주지는 않습니다. 오히려 ... 실망 스럽습니다.
George Mauer

음, dll을 추가하고 객체 탐색기를 열고 클래스를 검색하십시오. 물론 Visual Studio의 오른쪽 클릭 컨텍스트 메뉴도 도움이됩니다.
Joe

62

5
+1이 비디오를 적극 추천하고, 많이 배웠으며, IQueryable 및 IQbservable에 대한 Bart De Smet의 비디오도 확인하십시오. Rx 내부를 더 잘 이해할 수 있습니다.
기드온

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의 가장 중요한 점은 IEnumerable과 마찬가지로 '구성 가능'하다는 것입니다.

나는 다른 답변에서 언급 한 비디오를 엄격하게 추천합니다. 실제로 Channel9의 주제에 대한 여러 가지 비디오가 있습니다.


어디에서 왔을 때까지, 나는 그것을 사용할 수 없으며, 참조가 누락되어 있어야합니다
TimothyP

1
@TimothyP, 이전 버전으로 되돌릴 수 있다고 생각합니다. 그 또는 내가 직접 작성했습니다 (당시 IObservable 확장 메소드를 구현하면서 놀고있었습니다). 내가 볼 수 있듯이 최신 버전의 반응성 확장 프로그램에는이라는 메소드가 있는데 TakeUntil, 이는 적합한 것으로 보입니다.
Benjol

이것은 Rx의 정신을 보여주는 멋진 예입니다. 감사.
Dan Abramov

Pairwise () 구현을 공유 할 수 있습니까?
블래스터

1
@blaster,이 구현은 어떻습니까 : var pairwise = source.Zip(source.Skip(1), (x, y) => new Tuple(x, y)).
MisterMetaphor





3

Rx Sandbox 와 함께 사용 하면 다양한 조합기의 의미를 매우 직관적으로 볼 수 있습니다. 이것은 내가 본 최고의 학습 도구입니다.



2

두 번째 질문에 답하기 위해 Rx에서 많은 이점을 얻을 수있는 문제가 있습니다. "빠르게 부자"라고합니다.

당신은 같은 이름으로 게임을 개발했으며 꽤 잘 팔리고 있습니다. 그러나 그것은 당신의 상점에서만 도매로 구입할 수 있습니다. 현금 처리를보다 쉽게하기 위해 컨베이어 벨트가 있습니다.

(위의 이야기를 자유롭게 변경하십시오 :))

영업 사원은 뭉치에있는 청구서의 양과 유형을 나타내는 레이블이없는 뭉치의 현금을 뭉치로 놓습니다. 당신의 임무는 돈을 분류하고 계산하는 것입니다. 나중에 더 많은 돈을 받으면 다른 사람을 고용하여 도움을 줄 수 있습니다.

이 경우 소스는 현금 뭉치 (프로듀서)의 비동기 소스입니다. 직원과 공급 업체는 돈을 기대하지만, 뭉치를 소비하고 포장을 풀고 맞춤형 비즈니스 로직을 사용하여 지불하기에 적합한 재 포장을해야합니다.

영업 사원은 자신의 스레드에서 실행되므로 벨트에 던지는 것을 계산할 때까지 기다릴 필요가 없습니다. 계산할 수있는 돈이 더있을 때 다른 일을 할 수있을 때까지 시간이 가장 잘 활용됩니다.

각 뭉치를 바이트 []로 나타낼 수 있습니다.

이것은 매우 일반적인 실제 상황입니다. 네트워크 또는 주변 장치의 데이터에서 리소스 (예 : 검색 엔진, 이미지 또는 비디오 용 웹 페이지)를 검색하면 바이트 단위 (헤더 포함)로 가져옵니다. 단일 스레드 또는 작업하기에 너무 어려운 다중 스레드 환경에서는 스레드를 집계하고 처리하는 경향이 있습니다. 더 이상!


이것은 동일한 IObserver <T>에서 OnNext를 호출 한 다음 소비자를 구독하지만 생산중인 곳과 다른 스레드에서 관찰 중인지 확인하는 일부 생산자 (판매자)입니다.
Lee Campbell



1

Andreas Hoffmann의 링크 외에도 Rx를 배울 때 매우 유용했습니다.

다음은 Bart De Smet (정말 잘 설명하는 매우 똑똑한 사람) 동영상입니다.

Rx :
Rx-비동기 프로그래밍 블루스 치료

일부 피투성이 내부 + 어떤 철학이 동영상은 정말 계몽되어
최소 LINQ를 - LINQ의 본질
(LINQ는 좀 다른 것들에 어떻게 관련되는지에 위의 비디오 거래를, 마찬가지로 수신)

IQbservable에 대한 관찰-IQueryable의 이중



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.