瀏覽代碼

add async support for CAPTransaction

master
Savorboard 5 年之前
父節點
當前提交
ce06c23c46
共有 4 個檔案被更改,包括 65 行新增2 行删除
  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 查看文件

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

using System.Data;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.DependencyInjection;
@@ -33,6 +35,22 @@ namespace DotNetCore.CAP
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()
{
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()
{
(DbTransaction as IDbTransaction)?.Dispose();


+ 20
- 2
src/DotNetCore.CAP.MySql/IDbContextTransaction.CAP.cs 查看文件

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

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

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

public Guid TransactionId { get; }

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

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

public void 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 查看文件

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

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

public abstract void Commit();

public abstract Task CommitAsync(CancellationToken cancellationToken = default);

public abstract void Rollback();

public abstract Task RollbackAsync(CancellationToken cancellationToken = default);

public abstract void Dispose();
}
}

+ 6
- 0
src/DotNetCore.CAP/ICapTransaction.cs 查看文件

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

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

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

Task CommitAsync(CancellationToken cancellationToken = default);

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

Task RollbackAsync(CancellationToken cancellationToken = default);
}
}

Loading…
取消
儲存