コード例 #1
0
        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;
                }
            }
        }