Re[2]: Как корректно остановить асинхронное чтение из UdpCli
От: Аноним  
Дата: 23.07.08 13:26
Оценка:
Здравствуйте, merk, Вы писали:

> если в старте вы начали прием, то в стопе долна быть явная функция снимающая колбек


К сожалению, мне не известен способ отменить запущенную асинхронную операцию.

> нельзя ли как то избавиться от new в колбеке


Да, сделаю remoteEP членом класса, чтобы не создавать каждый раз новый экземпляр.

> тут вопрос. это колбек дезактвируется и пока не скажут стартресив — вызываться не будет?

> это плохо.

Да, callback срабатывает один раз, когда асинхронная операция выполнена. Для получения результата асинхронной операции требуется вызвать EndReceive.

> колбеку нежелательно управлять самим собой.


Я собираюсь попробовать следующую схему. DataReceiver.Start запускает поток, который крутится в цикле, запуская асинхронную операцию получения дейтаграммы и ожидая ее завершения или сигнала к остановке. Callback вообще не используется.

> еще хуже блокировки в колбеке за счет вызова каких то ваших "передач данных подписчикам"


С этим как раз проблем нет — я генерирую event, подписчик которого добавляет пакте в очередь (producer / consumer), задержка минимальна. То, что подписчик обязан обеспечить минимальную задержку, документировано в интерфейсе класса.

Спасибо за ответ. Подумав над вопросами и перечитав Asynchronous Programming Design Patterns, решил отказаться от callback. Асинхронность по-прежнему нужна, чтобы можно было завершить работу DataReceiver во время ожидания очередного пакета (или если пакетов вообще нет).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.