Здравствуйте, gandjustas, Вы писали:
S>>И AsyncQueryRecievedCallback будет вызываться асинхронно? Я все правильно написал? И вообще, нужен ли здесь RX если изначально в классе Client будет асинхронная работа с сокетами и callback так и так позовется асинхронно?
G>Основное преимущество Rx не в асинхронности (это как раз легко делается), а в том что такие асинхронные потоки можно обрабатывать с помощью комбинаторов и Linq (читай работают замыкания).
Я понимаю, что для получившейся коллекции сообщений становится возможным использовать линк, чтобы например получить последнее сообщение или найти разницу между двумя последовательностями, все что можно делать с обычными коллекциями
В статье по RX приводится классический пример с drag&drop, когда из серий сообщений MouseMove,MouseDown и MouseUp генерируется серия MouseMove между нажатием кнопки и её опусканием. То есть, если мне надо будет пропускать сообщения или как-то агрегировать разные потоки — то да, это может иметь смысл. Но у меня протокол запрос-ответ, то есть серверу надо персонально ответить каждому клиенту или спросить каждого клиента. Не вижу тут преимуществ от использования RX и Linq.
Извините, если слишком занудствую, хочется разобраться
Здравствуйте, Sshur, Вы писали:
S>Здравствуйте, gandjustas, Вы писали:
S>>>И AsyncQueryRecievedCallback будет вызываться асинхронно? Я все правильно написал? И вообще, нужен ли здесь RX если изначально в классе Client будет асинхронная работа с сокетами и callback так и так позовется асинхронно?
G>>Основное преимущество Rx не в асинхронности (это как раз легко делается), а в том что такие асинхронные потоки можно обрабатывать с помощью комбинаторов и Linq (читай работают замыкания).
S>Я понимаю, что для получившейся коллекции сообщений становится возможным использовать линк, чтобы например получить последнее сообщение или найти разницу между двумя последовательностями, все что можно делать с обычными коллекциями
S>В статье по RX приводится классический пример с drag&drop, когда из серий сообщений MouseMove,MouseDown и MouseUp генерируется серия MouseMove между нажатием кнопки и её опусканием. То есть, если мне надо будет пропускать сообщения или как-то агрегировать разные потоки — то да, это может иметь смысл. Но у меня протокол запрос-ответ, то есть серверу надо персонально ответить каждому клиенту или спросить каждого клиента. Не вижу тут преимуществ от использования RX и Linq.
S>Извините, если слишком занудствую, хочется разобраться
1)Откуда берется запрос? Вероятнее всего является реакцией на пользовательское событие (нажатие кнопки)
2)Куда девается ответ? Вероятнее всего как-то выводится на интерфейс пользователя.
С помощью Rx все эти подробности можно описать в одном месте, причем везде будет доступен контекст.
Примерно так (почти псевдокод)
var q = from ea in Observable.FromEvent(btn,"Click")
from r in _service.GetResponse(PrepareRequest(ea))
select new { Button = ea.Sender as Button, Response = ProcessResponse(r)};
var cookie = q.ObserveOn(/*Form*/this).Subscribe(p => {...});
Попробуй для разминки сделать подобное на событиях или коллбеках.