Судя по коду на кодплексе проблема в том, что
this.AddInfoLog("Отмена заявки {0}.", _order.TransactionId);
_isCanceling = true;
_order
.WhenCanceled()
.Do((r, o) =>
{
this.AddInfoLog("Заявка {0} была снята. Время снятия {1}.", o.TransactionId, o.LastChangeTime);
Rules.RemoveRulesByToken(o, r);
if (_order == o)
{
_manualReRegisterOrder = _order;
_order = null;
_isCanceling = false;
ProcessQuoting();
}
else
this.AddWarningLog("Заявка {0} устарела.", o.TransactionId);
})
.Once()
.Sync(_syncToken)
.Apply(this);
CancelOrder(_order);
_order.WhenCanceled() не срабатывает, т.к. ордер УЖЕ отменен до того, как подписались на это событие. Думаю, нужно добавить проверку типа _order.State==OrderStates.Active. Если да, то выполнить выше приведенную ветку, если нет и орден не NULL и состояние стратегии Active, то вызвать ProcessQuoting, либо в конце процедуры ProcessQuoting делать проверку
if (_isCanceling==true && this.ProcessState==ProcessStates.Active && _order.State==OrderStates.Done)
{
_isCanceling=false;
ProcessQuoting();
//либо вызвать здесь событие orderCancelled, чтобы сработала ветка приведенная выше, либо делать подписку на событие WhenCanceled в момент создания ордера...
}