Paradygmat przyszłości/Promesa stosuje się na ogół do zwracania pojedynczej wartości w przyszłości. Być może potrzebne są ciężkie kalkulacje lub OI, a więc dlaczego nie można zagwarantować, że wrócą synchronicznie w odpowiednim czasie.
Rx (i przez proxy interfejsy IObserver<T>
/IObservable<T>
) jest paradygmatem obserwowalnych sekwencji. Tak jak metoda synchroniczna może zwrócić pojedynczą wartość (int), może również zwrócić wartość IEnumerable<int>
z jedną wartością. Porównując to do asynchronicznego świata, Task<int>
może zwrócić pojedynczą wartość int
, IObservable<int>
może zwrócić sekwencję z jedną wartością int
.
Jeśli więc chcesz zwrócić sekwencję wartości za pomocą Task<T>
, musisz utworzyć jakiś rodzaj kontynuacji lub zwrócić kolekcję/tablicę/listę wartości jako T
, np. Task<int[]>
. To jednak oznacza, że otrzymujesz wszystkie wartości lub nie.
Task
/ to również konkretny typ, w którym Rx używa interfejsów do abstrakcji z wdrożenia. Znalazłem to, aby pomóc w testowaniu jednostkowym. TaskCompletionSource<T>
może jednak pomóc w uniknięciu niejawnej współbieżności podczas testowania z zadaniami.
Na koniec, oprócz głównej różnicy, że Rx ma do czynienia z sekwencjami wartości (nie pojedynczymi wartościami), Rx jest również zaprojektowany do pracy z LINQ w celu dostarczenia korzyści związanych z zapytaniami i składem, które wydaje się działać bardzo dobrze z sekwencjami (na odpoczywać jak IEnumerable<T>
lub w ruchu jak IObservable<T>
).
Są to ostatecznie różne narzędzia do nieco innych zadań. Istnieje pewne nakładanie się, więc czasami można użyć jednego do zrobienia tego, co jest lepsze w drugim.Mówiąc dokładniej, myślę, że Task
jest lepszy w komponowaniu jednostek asynchronicznej pracy razem (Zrób to, to zrób to, to zrób to), gdzie jak Rx jest lepszy w komponowaniu sekwencji zdarzeń razem (Kiedy to zdarzenie się dzieje, zrób to z danymi z tego innego wydarzenia).
Czy nawet googlowałeś? Show nie daje żadnych oznak, że masz. – fredrik
@fredrik, w jaki sposób powinienem udowodnić brak wyników google SERP na nim? –
Po prostu powiedz, czego szukałeś i nie przyniosło to żadnego rezultatu. To pokaże dla mnie, że przynajmniej spróbowałeś. – fredrik