| Previous | Next |
| XACT_E_ISOLATIONLEVEL | XACT_E_NOENLIST |
XACT_E_NOASYNC
XACT_E_NOASYNC is the failure HRESULT 0x8004D009 (signed decimal -2147168247, unsigned decimal 2147799049). Its severity bit is 1, facility is 4 (FACILITY_ITF), and the facility-specific code field is 0xD009.
The selected transaction operation has no asynchronous contract
This HRESULT means that the caller asked a transaction manager or transaction object to perform a method asynchronously, but that method implementation only supports synchronous completion. The request is rejected before an asynchronous outcome channel can be relied upon.
AllStat records the Windows message as: “The transaction manager doesn't support an asynchronous operation for this method.” This text should be interpreted at the transaction stage described below rather than as a generic COM failure.
The contract boundary to identify
The decisive input is the asynchronous option on the exact method that returned the code. It is not evidence that all MSDTC operations are synchronous, nor that a callback merely arrived late. The caller must verify the method-specific flags and the interface version actually obtained from the transaction object.
Likely causes to separate
- An asynchronous flag was copied from a different transaction method whose contract permits it.
- A provider or older transaction implementation exposes the interface but not the optional asynchronous path.
- A wrapper selected asynchronous commit or abort without preserving the required outcome-notification object.
- The application treated a capability choice as a performance hint rather than a contract that may be rejected.
Evidence worth preserving
- Record the interface name, method, flags, transaction identifier, and whether an outcome sink was supplied.
- Capture the transaction-manager and provider versions because support can differ across implementations.
- Log whether any work had already enlisted before the unsupported mode was requested.
- Preserve the caller stack so a framework default can be distinguished from an explicit application choice.
Diagnostic sequence
- Read the return contract of the exact commit, abort, or resource-manager method rather than assuming every XACT method shares the same options.
- Repeat the operation synchronously in a controlled test while keeping the transaction and enlisted resources unchanged.
- If asynchronous completion is required architecturally, use an interface and completion mechanism that explicitly documents it.
- Do not start a second transaction merely to imitate asynchronous behavior; that would change atomicity and ordering.
Retry and recovery
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.
What this HRESULT does not establish
The code does not indicate that commit or abort already happened. It also does not mean that MSDTC is unavailable, that the transaction timed out, or that an asynchronous request is still pending.
Difference from nearby transaction results
XACT_S_ASYNC means a supported asynchronous operation started and its final outcome is not yet known. XACT_E_ALREADYINPROGRESS instead reports that an operation is already active for the transaction.
Practical scenario
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.
Guidance for software and telemetry
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.”
Official Microsoft references
- Microsoft: COM transaction error codes
- Microsoft: ITransaction
- Microsoft: DTC interfaces
- Microsoft: HRESULT values in MS-ERREF
Looking for a different code? Search another status or error code.
