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
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.