Browse Source

add async support for CAPTransaction

master
Savorboard 5 years ago
parent
commit
ce06c23c46
4 changed files with 65 additions and 2 deletions
  1. +33
    -0
      src/DotNetCore.CAP.MySql/ICapTransaction.MySql.cs
  2. +20
    -2
      src/DotNetCore.CAP.MySql/IDbContextTransaction.CAP.cs
  3. +6
    -0
      src/DotNetCore.CAP/ICapTransaction.Base.cs
  4. +6
    -0
      src/DotNetCore.CAP/ICapTransaction.cs

+ 33
- 0
src/DotNetCore.CAP.MySql/ICapTransaction.MySql.cs View File

@@ -3,6 +3,8 @@


using System.Data; using System.Data;
using System.Diagnostics; using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
@@ -33,6 +35,22 @@ namespace DotNetCore.CAP
Flush(); Flush();
} }


public override async Task CommitAsync(CancellationToken cancellationToken = default)
{
Debug.Assert(DbTransaction != null);

switch (DbTransaction)
{
case IDbTransaction dbTransaction:
dbTransaction.Commit();
break;
case IDbContextTransaction dbContextTransaction:
await dbContextTransaction.CommitAsync(cancellationToken);
break;
}
Flush();
}

public override void Rollback() public override void Rollback()
{ {
Debug.Assert(DbTransaction != null); Debug.Assert(DbTransaction != null);
@@ -48,6 +66,21 @@ namespace DotNetCore.CAP
} }
} }


public override async Task RollbackAsync(CancellationToken cancellationToken = default)
{
Debug.Assert(DbTransaction != null);

switch (DbTransaction)
{
case IDbTransaction dbTransaction:
dbTransaction.Rollback();
break;
case IDbContextTransaction dbContextTransaction:
await dbContextTransaction.RollbackAsync(cancellationToken);
break;
}
}

public override void Dispose() public override void Dispose()
{ {
(DbTransaction as IDbTransaction)?.Dispose(); (DbTransaction as IDbTransaction)?.Dispose();


+ 20
- 2
src/DotNetCore.CAP.MySql/IDbContextTransaction.CAP.cs View File

@@ -2,6 +2,8 @@
// Licensed under the MIT License. See License.txt in the project root for license information. // Licensed under the MIT License. See License.txt in the project root for license information.


using System; using System;
using System.Threading;
using System.Threading.Tasks;
using DotNetCore.CAP; using DotNetCore.CAP;


// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace
@@ -15,10 +17,12 @@ namespace Microsoft.EntityFrameworkCore.Storage
public CapEFDbTransaction(ICapTransaction transaction) public CapEFDbTransaction(ICapTransaction transaction)
{ {
_transaction = transaction; _transaction = transaction;
var dbContextTransaction = (IDbContextTransaction) _transaction.DbTransaction;
var dbContextTransaction = (IDbContextTransaction)_transaction.DbTransaction;
TransactionId = dbContextTransaction.TransactionId; TransactionId = dbContextTransaction.TransactionId;
} }


public Guid TransactionId { get; }

public void Dispose() public void Dispose()
{ {
_transaction.Dispose(); _transaction.Dispose();
@@ -29,11 +33,25 @@ namespace Microsoft.EntityFrameworkCore.Storage
_transaction.Commit(); _transaction.Commit();
} }


public Task CommitAsync(CancellationToken cancellationToken = default)
{
return _transaction.CommitAsync(cancellationToken);
}

public void Rollback() public void Rollback()
{ {
_transaction.Rollback(); _transaction.Rollback();
} }


public Guid TransactionId { get; }
public Task RollbackAsync(CancellationToken cancellationToken = default)
{
return _transaction.CommitAsync(cancellationToken);
}

public ValueTask DisposeAsync()
{
Dispose();
return new ValueTask();
}
} }
} }

+ 6
- 0
src/DotNetCore.CAP/ICapTransaction.Base.cs View File

@@ -1,4 +1,6 @@
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;
using DotNetCore.CAP.Persistence; using DotNetCore.CAP.Persistence;


namespace DotNetCore.CAP namespace DotNetCore.CAP
@@ -36,8 +38,12 @@ namespace DotNetCore.CAP


public abstract void Commit(); public abstract void Commit();


public abstract Task CommitAsync(CancellationToken cancellationToken = default);

public abstract void Rollback(); public abstract void Rollback();


public abstract Task RollbackAsync(CancellationToken cancellationToken = default);

public abstract void Dispose(); public abstract void Dispose();
} }
} }

+ 6
- 0
src/DotNetCore.CAP/ICapTransaction.cs View File

@@ -2,6 +2,8 @@
// Licensed under the MIT License. See License.txt in the project root for license information. // Licensed under the MIT License. See License.txt in the project root for license information.


using System; using System;
using System.Threading;
using System.Threading.Tasks;


namespace DotNetCore.CAP namespace DotNetCore.CAP
{ {
@@ -25,9 +27,13 @@ namespace DotNetCore.CAP
/// </summary> /// </summary>
void Commit(); void Commit();


Task CommitAsync(CancellationToken cancellationToken = default);

/// <summary> /// <summary>
/// We will delete the message data that has not been sstore in the buffer data of current transaction context. /// We will delete the message data that has not been sstore in the buffer data of current transaction context.
/// </summary> /// </summary>
void Rollback(); void Rollback();

Task RollbackAsync(CancellationToken cancellationToken = default);
} }
} }

Loading…
Cancel
Save