public async Task ApplyChangesAsync(CancellationToken token = default) { if (_operations.Count > 0) { IClientSessionHandle session = null; if (_connection.UseTransactions) { session = _connection.StartSession(); session.StartTransaction(); } try { while (_operations.Count > 0) { var item = _operations.Dequeue(); await item.ProcessAsync(session, token); } if (session != null) { await session.CommitTransactionAsync(token); session.Dispose(); } _operations.Clear(); } catch { if (session != null) { await session.AbortTransactionAsync(token); session.Dispose(); } throw; } } }