Mam klasy,Załóż zaobserwowania opakowanie do bezpiecznego non wątku klasy
public class Test
{
public int Calc();
}
który wymaga, aby wszystkie połączenia do Calc być wykonywane w tym samym wątku jak ten, na którym test został stworzony. Muszę utworzyć test raz (kosztowna operacja) i wielokrotnie wywołać funkcję Calc.
Chciałbym mieć opakowanie, które pozwoli mi zadzwonić Calc asynchronousely:
public class TestWrapper
{
private Test _test;
public IObservable<int> Calc();
}
Jednym ze sposobów byłoby stworzyć BackgroundWorker lub wątek i używać go jako gwarancję, że wszystkie operacje na Test są w tym samym wątku. Dla uproszczenia możemy założyć, że wszystkie wywołania funkcji Calc() będą wykonywane sekwencyjnie, więc nie trzeba się martwić o kolejkowanie.
Czy jest bardziej elegancki sposób RX to zrobić?
Dzięki, EventLoopScheduler jest kluczem do przekazywania połączeń do tego samego wątku. Mimo to ta odpowiedź nie wyjaśnia, jak przełączyć z TestWrapper.Calc, który będzie wykonywany na wątku UI do testowania.Calc ... –
@Sergey - Zaktualizowano na podstawie komentarzy –
Jest bliżej ... Brakuje części nie twórz _test (co powinno zostać wykonane na EventLoopScheduler). Hmm ... Trudno zdecydować - byłeś pierwszy z EventLoopScheduler, ale @enigmativity dostarczył poprawną odpowiedź. Dziękuję wam oboje rock! –