Performs a single transaction attempt. All reads/writes should be performed using
txn.
Implementations of this method should not attempt to commit the transaction directly:
returning normally will result in the runner attempting to commit the transaction once the
returned future completes, retrying on abort.
In most cases, the implementation will not need to catch SpannerExceptions from
Spanner operations, instead letting these propagate to the framework. The transaction runner
will take appropriate action based on the type of exception. In particular, implementations
should never catch an exception of type Code#ABORTED: these indicate that some reads
may have returned inconsistent data and the transaction attempt must be aborted.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-28 UTC."],[],[],null,["# Interface AsyncRunner.AsyncWork<R> (6.98.1)\n\nVersion latestkeyboard_arrow_down\n\n- [6.98.1 (latest)](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.98.0](/java/docs/reference/google-cloud-spanner/6.98.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.97.1](/java/docs/reference/google-cloud-spanner/6.97.1/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.96.1](/java/docs/reference/google-cloud-spanner/6.96.1/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.95.1](/java/docs/reference/google-cloud-spanner/6.95.1/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.94.0](/java/docs/reference/google-cloud-spanner/6.94.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.93.0](/java/docs/reference/google-cloud-spanner/6.93.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.89.0](/java/docs/reference/google-cloud-spanner/6.89.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.88.0](/java/docs/reference/google-cloud-spanner/6.88.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.87.0](/java/docs/reference/google-cloud-spanner/6.87.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.86.0](/java/docs/reference/google-cloud-spanner/6.86.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.85.0](/java/docs/reference/google-cloud-spanner/6.85.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.83.0](/java/docs/reference/google-cloud-spanner/6.83.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.82.0](/java/docs/reference/google-cloud-spanner/6.82.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.80.1](/java/docs/reference/google-cloud-spanner/6.80.1/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.79.0](/java/docs/reference/google-cloud-spanner/6.79.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.77.0](/java/docs/reference/google-cloud-spanner/6.77.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.74.1](/java/docs/reference/google-cloud-spanner/6.74.1/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.72.0](/java/docs/reference/google-cloud-spanner/6.72.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.71.0](/java/docs/reference/google-cloud-spanner/6.71.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.69.0](/java/docs/reference/google-cloud-spanner/6.69.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.68.0](/java/docs/reference/google-cloud-spanner/6.68.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.66.0](/java/docs/reference/google-cloud-spanner/6.66.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.65.1](/java/docs/reference/google-cloud-spanner/6.65.1/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.62.0](/java/docs/reference/google-cloud-spanner/6.62.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.60.0](/java/docs/reference/google-cloud-spanner/6.60.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.58.0](/java/docs/reference/google-cloud-spanner/6.58.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.57.0](/java/docs/reference/google-cloud-spanner/6.57.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.56.0](/java/docs/reference/google-cloud-spanner/6.56.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.55.0](/java/docs/reference/google-cloud-spanner/6.55.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.54.0](/java/docs/reference/google-cloud-spanner/6.54.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.53.0](/java/docs/reference/google-cloud-spanner/6.53.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.52.1](/java/docs/reference/google-cloud-spanner/6.52.1/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.51.0](/java/docs/reference/google-cloud-spanner/6.51.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.50.1](/java/docs/reference/google-cloud-spanner/6.50.1/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.49.0](/java/docs/reference/google-cloud-spanner/6.49.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.25.1](/java/docs/reference/google-cloud-spanner/6.25.1/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.24.0](/java/docs/reference/google-cloud-spanner/6.24.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.23.4](/java/docs/reference/google-cloud-spanner/6.23.4/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.22.0](/java/docs/reference/google-cloud-spanner/6.22.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.21.2](/java/docs/reference/google-cloud-spanner/6.21.2/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.20.0](/java/docs/reference/google-cloud-spanner/6.20.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.19.1](/java/docs/reference/google-cloud-spanner/6.19.1/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.18.0](/java/docs/reference/google-cloud-spanner/6.18.0/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.17.4](/java/docs/reference/google-cloud-spanner/6.17.4/com.google.cloud.spanner.AsyncRunner.AsyncWork)\n- [6.14.1](/java/docs/reference/google-cloud-spanner/6.14.1/com.google.cloud.spanner.AsyncRunner.AsyncWork) \n\n public static interface AsyncRunner.AsyncWork\u003cR\u003e\n\nFunctional interface for executing a read/write transaction asynchronously that returns a\nresult of type R.\n\nMethods\n-------\n\n### doWorkAsync(TransactionContext txn)\n\n public abstract ApiFuture\u003cR\u003e doWorkAsync(TransactionContext txn)\n\nPerforms a single transaction attempt. All reads/writes should be performed using `\ntxn`.\n\nImplementations of this method should not attempt to commit the transaction directly:\nreturning normally will result in the runner attempting to commit the transaction once the\nreturned future completes, retrying on abort.\n\nIn most cases, the implementation will not need to catch `SpannerException`s from\nSpanner operations, instead letting these propagate to the framework. The transaction runner\nwill take appropriate action based on the type of exception. In particular, implementations\nshould never catch an exception of type Code#ABORTED: these indicate that some reads\nmay have returned inconsistent data and the transaction attempt must be aborted."]]