текущий файбер до возврата результата, а вместо этого писал в сокет и, не дожидаясь ответа, сразу возвращал бы некоторый future объект, по которому потом ответ можно было бы получить (см C++ std::future, Future в .NET).
Если да, то скажите плиз, какой вариант API больше нравится?
1. опция is_async во всех вызовах. Если true, то возвращается future объект, по которому потом можно чекать результат, или блочиться до его получения. Пример:
-- Immediate return from call.
future = conn:call(func, {params}, {timeout = ..., is_async = true})
-- Do some work ...
if not future.is_ready then
future:wait_result()
end
result = future:get_result()
2. враппер async() (как timeout()).
future = conn:async():call(func, {params})
-- Further the same.
3. Весь коннект превратить в асинхронный.
conn:set_async(true)
future = conn:call(func, {params}, {...})
-- Further the same.
вариант 4: future = conn:call_async(func, {params})
Обсуждают сегодня