Добавил модуль coro для прозрачного проброса yield'а вверх по цепочке корутин.
Корутины нередко используются для передачи управления наружу из Lua. Например, для работы по сети, когда Lua'шный стейт откладывается в пул до получения ответа, а по получении ответа делается resume. В этом случае все сетевые операции в Lua делают yield.
В обычном случае это делает невозможным использование этих сетевых операций внутри пользовательских корутин. Если же пользоваться новым модулем, это ограничение снимается. Для этого нужно:
- Для всех пользовательских корутин вызывать coro.resume_inner вместо coroutine.resume.
- Во всех сетевых операциях вызывать coro.yield_outer вместо coroutine.yield.
- В пользовательском коде использовать coro.pcall вместо pcall-а.
- Результат coroutine.resume во внешней корутине перед обработкой пропускать через функцию coro.eat_tag.
Комментариев нет:
Отправить комментарий