@@ -248,10 +248,7 @@ public WriteBatch StartBatch() {
248248    /// be invoked on the main thread.</param> 
249249    /// <returns>A task which completes when the transaction has committed.</returns> 
250250    public  Task  RunTransactionAsync ( Func < Transaction ,  Task >  callback )  { 
251-       Preconditions . CheckNotNull ( callback ,  nameof ( callback ) ) ; 
252-       // Just pass through to the overload where the callback returns a Task<T>. 
253-       return  RunTransactionAsync ( transaction => 
254-                                      Util . MapResult < object > ( callback ( transaction ) ,  null ) ) ; 
251+       return  RunTransactionAsync ( new  TransactionOptions ( ) ,  callback ) ; 
255252    } 
256253
257254    /// <summary> 
@@ -276,8 +273,65 @@ public Task RunTransactionAsync(Func<Transaction, Task> callback) {
276273    /// <returns>A task which completes when the transaction has committed. The result of the task 
277274    /// then contains the result of the callback.</returns> 
278275    public  Task < T >  RunTransactionAsync < T > ( Func < Transaction ,  Task < T > >  callback )  { 
276+       return  RunTransactionAsync ( new  TransactionOptions ( ) ,  callback ) ; 
277+     } 
278+ 
279+     /// <summary> 
280+     /// Runs a transaction asynchronously, with an asynchronous callback that returns a value. 
281+     /// The specified callback is executed for a newly-created transaction. 
282+     /// </summary> 
283+     /// <remarks> 
284+     /// <para><c>RunTransactionAsync</c> executes the given callback on the main thread and then 
285+     /// attempts to commit the changes applied within the transaction. If any document read within 
286+     /// the transaction has changed, the <paramref name="callback"/> will be retried. If it fails to 
287+     /// commit after the maximum number of attempts specified in the given <c>TransactionOptions</c> 
288+     /// object, the transaction will fail.</para> 
289+     /// 
290+     /// <para>The maximum number of writes allowed in a single transaction is 500, but note that 
291+     /// each usage of <see cref="FieldValue.ServerTimestamp"/>, <c>FieldValue.ArrayUnion</c>, 
292+     /// <c>FieldValue.ArrayRemove</c>, or <c>FieldValue.Increment</c> inside a transaction counts as 
293+     /// an additional write.</para> 
294+     /// </remarks> 
295+     /// 
296+     /// <typeparam name="T">The result type of the callback.</typeparam> 
297+     /// <param name="options">The transaction options for controlling execution. Must not be 
298+     /// <c>null</c>.</param> 
299+     /// <param name="callback">The callback to execute. Must not be <c>null</c>. The callback will 
300+     /// be invoked on the main thread.</param> 
301+     /// <returns>A task which completes when the transaction has committed. The result of the task 
302+     /// then contains the result of the callback.</returns> 
303+     public  Task < T >  RunTransactionAsync < T > ( TransactionOptions  options ,  Func < Transaction ,  Task < T > >  callback )  { 
304+       Preconditions . CheckNotNull ( options ,  nameof ( options ) ) ; 
305+       Preconditions . CheckNotNull ( callback ,  nameof ( callback ) ) ; 
306+       return  WithFirestoreProxy ( proxy =>  _transactionManager . RunTransactionAsync ( options ,  callback ) ) ; 
307+     } 
308+ 
309+     /// <summary> 
310+     /// Runs a transaction asynchronously, with an asynchronous callback that doesn't return a 
311+     /// value. The specified callback is executed for a newly-created transaction. 
312+     /// </summary> 
313+     /// <remarks> 
314+     /// <para><c>RunTransactionAsync</c> executes the given callback on the main thread and then 
315+     /// attempts to commit the changes applied within the transaction. If any document read within 
316+     /// the transaction has changed, the <paramref name="callback"/> will be retried. If it fails to 
317+     /// commit after the maximum number of attempts specified in the given <c>TransactionOptions</c> 
318+     /// object, the transaction will fail.</para> 
319+     /// 
320+     /// <para>The maximum number of writes allowed in a single transaction is 500, but note that 
321+     /// each usage of <see cref="FieldValue.ServerTimestamp"/>, <c>FieldValue.ArrayUnion</c>, 
322+     /// <c>FieldValue.ArrayRemove</c>, or <c>FieldValue.Increment</c> inside a transaction counts as 
323+     /// an additional write.</para> 
324+     /// </remarks> 
325+     /// <param name="options">The transaction options for controlling execution. Must not be 
326+     /// <c>null</c>.</param> 
327+     /// <param name="callback">The callback to execute. Must not be <c>null</c>. The callback will 
328+     /// be invoked on the main thread.</param> 
329+     /// <returns>A task which completes when the transaction has committed.</returns> 
330+     public  Task  RunTransactionAsync ( TransactionOptions  options ,  Func < Transaction ,  Task >  callback )  { 
331+       Preconditions . CheckNotNull ( options ,  nameof ( options ) ) ; 
279332      Preconditions . CheckNotNull ( callback ,  nameof ( callback ) ) ; 
280-       return  WithFirestoreProxy ( proxy =>  _transactionManager . RunTransactionAsync ( callback ) ) ; 
333+       // Just pass through to the overload where the callback returns a Task<T>. 
334+       return  RunTransactionAsync ( options ,  transaction =>  Util . MapResult < object > ( callback ( transaction ) ,  null ) ) ; 
281335    } 
282336
283337    private  static SnapshotsInSyncCallbackMap  snapshotsInSyncCallbacks  =  new  SnapshotsInSyncCallbackMap ( ) ; 
0 commit comments