Ниже приведены мои наблюдения, основанные на Net.ts, но не на ASIO - я считаю, что между ними не произойдет никаких фундаментальных изменений.
, когда мы отменим таймер - независимо от его срока действия, егообработчики или pending_waiter будут работать, и, похоже, все они работают с их error_code
, установленным на
op->ec_ = std::experimental::net::v1::error::operation_aborted;
Итак, насколько я понимаю, ваш второй вопрос: что если у меня есть объект таймера внутрикласс, и по некоторым причинам деструктор объекта принадлежит этому классу, запускает и отменяет таймер (?)
В асинхронном программировании (в частности, тот, который был установлен с использованием обратных вызовов), аргумент error_code
, который получаетпереданный вашему обработчику играет главную роль.
Итак, в вашем сценарии, я полагаю, вы могли бы преодолеть предполагаемое «столкновение при столкновении», используя
if(ec == std::experimental::net::v1::error::operation_aborted)
LOG(....) or return;
Редактировать: если ваш запрос какМожем ли мы управлять жизненным циклом объекта, тогда я могу сказать, что есть несколько способов сделать это, но момент, который я хочу донести через мое замечание, - это объект таймера всякий раз, когда отменяетсяlled, он сообщает вам через ec
, что он был отменен, и на основании этого решает ваш следующий ход.