Site icon EfmSoft

Что означает код HRESULT 0x80010004 (RPC_E_CANTCALLOUT_INASYNCCALL)?

 
Предыдущий Следующий
RPC_E_CANTPOST_INSENDCALL RPC_E_CANTCALLOUT_INEXTERNALCALL

RPC_E_CANTCALLOUT_INASYNCCALL

Что означает RPC_E_CANTCALLOUT_INASYNCCALL

RPC_E_CANTCALLOUT_INASYNCCALL возвращается, когда код, обслуживающий асинхронный COM-вызов, пытается сделать новый исходящий COM-вызов в запрещённом контексте. Ограничение связано с текущей диспетчеризацией вызова и защитой от недопустимого reentrancy.

Что проверить

Проследите стек от callback до первого внешнего COM-интерфейса. Часто исходящий вызов скрыт внутри helper-функции, логирования, UI-объекта или другого компонента, поэтому искать нужно не только явный вызов рядом с местом ошибки.

Исправление состоит в разделении этапов: callback должен завершить текущую обработку, после чего зависимую работу можно поставить в очередь owning apartment или выполнить из обычного пути управления. Повтор того же callout внутри текущего callback не меняет контекст и закономерно вернёт тот же HRESULT.

Технические ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.

Exit mobile version