| Предыдущий | Следующий |
| XACT_E_ISOLATIONLEVEL | XACT_E_NOENLIST |
XACT_E_NOASYNC
Где находится ошибка
XACT_E_NOASYNC (0x8004D009) — код ошибки из области MSDTC / COM+ transactions. Короткий ориентир по имени: асинхронный режим недоступен. Для диагностики важнее определить первый API и состояние объекта в момент возврата, чем переводить символическое имя как общее сообщение.
Исходное условие в техническом описании сформулировано так: The transaction method does not support the requested asynchronous mode.
. Эту формулировку следует сопоставлять с фактическим параметром, handle, файлом или state transition в trace.
Критическая граница
Проверяйте состояние самой транзакции отдельно от причины, которая привела её к этому состоянию. Для распределённого commit важны UOW, фаза протокола, голоса участников, ownership операции и терминальный outcome.
Для этого кода особенно полезно различать два признака из исходной документации: The transaction method does not support the requested asynchronous mode.
и If asynchronous completion is required architecturally, use an interface and completion mechanism that explicitly documents it.
. Они задают более узкую границу, чем название facility.
Минимальный полезный trace
- идентификатор UOW и первый API, вернувший код
- фаза prepare/commit/abort/recovery и текущий владелец перехода
- голоса и состояние resource managers, включая первый отказ
- тайм-аут, DTC trace и внешние побочные эффекты вне транзакции
- Сопоставьте trace с исходным признаком:
Remove the unsupported asynchronous option or move the operation to a documented asynchronous transaction path. A retry with the same method and flags is deterministic. When switching to synchronous execution, revise cancellation and timeout handling so the calling thread does not create a new deadlock or availability problem.
- Сопоставьте trace с исходным признаком:
A native wrapper always sets the asynchronous commit option. A local provider accepts synchronous commit only and returns this HRESULT before beginning completion. The wrapper clears the option, waits for the synchronous result, and keeps asynchronous orchestration outside the transaction API.
- Сопоставьте trace с исходным признаком:
Expose asynchronous support as a negotiated capability, not a universal configuration switch. Telemetry should distinguish “mode rejected before start” from “operation started and awaiting outcome.”
Проверка гипотезы
- Проверьте именно границу «асинхронный режим недоступен» и зафиксируйте объект, аргумент или состояние, которое её подтверждает.
- Сверьте наблюдаемое состояние с отдельным исходным признаком:
A provider or older transaction implementation exposes the interface but not the optional asynchronous path.
.
Критерий исправления
Исправляйте конкретную фазу или ownership. Не повторяйте commit/abort на старом объекте вслепую и не создавайте новую бизнес-попытку, пока не понятен исход предыдущей транзакции.
Регрессионная проверка должна отдельно контролировать условие Preserve the caller stack so a framework default can be distinguished from an explicit application choice.
. Положительный тест обязан проходить после узкого исправления, а отрицательный — по-прежнему воспроизводить ожидаемый отказ на заведомо неверном состоянии.
Технические ссылки
- Microsoft: COM transaction error codes
- Microsoft: ITransaction
- Microsoft: DTC interfaces
- Microsoft: HRESULT values in MS-ERREF
Нужно найти другой код? Найти другой код состояния или ошибки.