Создание асинхронного метода на событии
От: mitechka  
Дата: 16.10.15 17:17
Оценка:
Всем доброй пятницы!

Столкнулся со следующей проблемой.

Есть библиотека, реализующая межсетевое взаимодействие. Она классическая event-based. Т.е. есть событие получения/отправки сообщения. Но есть беда — есть метод SendMessage в классах клиента и сервера, но вот метода ReceiveMessage нет. Мол, не нужен — событие ж прилетает. Мне нужны синхронная и асинхронная версии ReceiveMessage. Думал, что может спасти ситуацию вариант с TaskCompletionSource, т.е. под каждого клиента, присоединившегося к серверу, например (пока представим, что нам нужно "допилить" серверную часть), изначально создаётся TaskCompletionSource, потом по отработке события делается SetResult(), далее же обратно возвращаем TaskCompletionSource в исходное состояние после отработки. Но у TaskCompletionSource нет методов возврата из RanToCompletion, а пересоздавать каждый раз под вызов ReceiveMessage() TaskCompletionSource крайне криво.
Посоветуйте, плз, как решить эту проблему "малой кровью" (т.е. быстро и качественно).
Заранее спасибо.
Re: Создание асинхронного метода на событии
От: TK Лес кывт.рф
Дата: 16.10.15 21:42
Оценка:
Здравствуйте, mitechka, Вы писали:

M>Есть библиотека, реализующая межсетевое взаимодействие. Она классическая event-based. Т.е. есть событие получения/отправки сообщения. Но есть беда — есть метод SendMessage в классах клиента и сервера, но вот метода ReceiveMessage нет. Мол, не нужен — событие ж прилетает. Мне нужны синхронная и асинхронная версии ReceiveMessage. Думал, что может спасти ситуацию вариант с TaskCompletionSource, т.е. под каждого клиента, присоединившегося к серверу, например (пока представим, что нам нужно "допилить" серверную часть), изначально создаётся TaskCompletionSource, потом по отработке события делается SetResult(), далее же обратно возвращаем TaskCompletionSource в исходное состояние после отработки. Но у TaskCompletionSource нет методов возврата из RanToCompletion, а пересоздавать каждый раз под вызов ReceiveMessage() TaskCompletionSource крайне криво.

M>Посоветуйте, плз, как решить эту проблему "малой кровью" (т.е. быстро и качественно).

Если результат получен то "провернуть" его назад уже нельзя. Собственно интерфейс TCS именно это и показывает.
Нужно получать что-то переодически — для это есть IObserver/IObservable
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Создание асинхронного метода на событии
От: mitechka  
Дата: 16.10.15 22:32
Оценка:
Здравствуйте, TK, Вы писали:

TK>Здравствуйте, mitechka, Вы писали:


M>>Есть библиотека, реализующая межсетевое взаимодействие. Она классическая event-based. Т.е. есть событие получения/отправки сообщения. Но есть беда — есть метод SendMessage в классах клиента и сервера, но вот метода ReceiveMessage нет. Мол, не нужен — событие ж прилетает. Мне нужны синхронная и асинхронная версии ReceiveMessage. Думал, что может спасти ситуацию вариант с TaskCompletionSource, т.е. под каждого клиента, присоединившегося к серверу, например (пока представим, что нам нужно "допилить" серверную часть), изначально создаётся TaskCompletionSource, потом по отработке события делается SetResult(), далее же обратно возвращаем TaskCompletionSource в исходное состояние после отработки. Но у TaskCompletionSource нет методов возврата из RanToCompletion, а пересоздавать каждый раз под вызов ReceiveMessage() TaskCompletionSource крайне криво.

M>>Посоветуйте, плз, как решить эту проблему "малой кровью" (т.е. быстро и качественно).

TK>Если результат получен то "провернуть" его назад уже нельзя. Собственно интерфейс TCS именно это и показывает.

TK>Нужно получать что-то переодически — для это есть IObserver/IObservable

Вечер добрый! А можете поделиться кодом/ссылочками на почитать? Был бы признателен!
Re[3]: IObserver/IObservable
От: Qbit86
Дата: 16.10.15 22:34
Оценка:
Здравствуйте, mitechka, Вы писали:

TK>>Нужно получать что-то переодически — для это есть IObserver/IObservable

M>Вечер добрый! А можете поделиться кодом/ссылочками на почитать? Был бы признателен!

http://www.introtorx.com
Глаза у меня добрые, но рубашка — смирительная!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.