2012-04-05 3 views
0

C# 응용 프로그램에서 비동기가되어야하는 기능이 있습니다. 상당히 간단한 워크 플로이므로 기본적으로 그럴 필요가 없습니다. jQuery.Deferred이 필요합니다.Rx 확장 기능이 jQuery.Deferred와 비슷한 기능을 제공합니까?

내 메서드는 사람들이 성공 및 실패 처리기를 연결할 수있는 개체를 반환해야합니다. 성공 또는 실패 처리기가 정확히 한 번만 시작됩니다. 또한 비동기 프로세스가 완료 될 때 성공/실패를 트리거하는 방법이 필요합니다. 내가 년 전이 기능을 필요로하지만,이 만드는 '새로운 물건없는 지난 시간에했던 것처럼 이런 종류의 시뮬레이션

var asyncTask = ReadSomeStatsFrom("a-really-big-file.txt"); 
asyncTask.OnSuccess += (stats) => Console.WriteLine("Completed " +stats.ToString()); 
asincTask.OnFail += (err) => Console.WriteLine("Uh Oh "+err.ToString()); 
//return control to the calling method and go on to do other stuff 

네, 스레드를 생성 할 수 있습니다 :

그래서 나는 이런 식으로 뭔가를 원하는 이 모든 게 지금 낫겠 니? 나는 Rx에 관해 듣고 있었고 비슷한 문제 영역 (분명히 훨씬 더)을 다루는 것으로 보인다.

그래서 질문 1 :이 기능을 수신에 찾고 올바른 궤도에 건가요? 만약 내가 쳐다 보지 않으면.

질문 2 방법 : 위의 예는 실제로 작업이 성공 또는 내부

답변

3

ReadSomeStatsFrom() 종료 너무 작업, 병렬 라이브러리에서보세요 있다는 의미를 포함, RX로 보일 것이다. 그것은 clr과 함께 배송되며, 그것은 당신의 필요에 더 잘 어울립니다. Rx는 주로 단일 스트림이 아닌 이벤트 스트림을위한 것입니다.

비동기 io (파일 읽기)가 tpl 작업에 거의 직접 래핑되는 샘플을 보았지만 4.5 기능이 될 수 있습니다.

1

당신이 찾고있는 것이 바로 작업 병렬 라이브러리입니다. 여기서 http://msdn.microsoft.com/en-us/library/ee372288.aspx 링크는 라이브러리의 기능을 설명합니다.

특히, 응답을 페이지에서 논의되는 연속으로 처리하려고합니다.

4

Rx는 사용자의 요구에 가장 적합합니다.

Observable 
    .Start(() => ReadSomeStatsFrom("a-really-big-file.txt")) 
    .Subscribe(
     stats => Console.WriteLine("Completed " + stats.ToString()), 
     err => Console.WriteLine("Uh Oh " + err.ToString())); 

내가 TPL이 너무 잘 맞는 될 수 있음에 동의하지만, 수신은 여러 가지 방법으로 TPL보다 더 표현 될 수 있습니다 ReadSomeStatsFrom를 기록 할 수

경우 동 기적으로 다음이 시도.

관련 문제