- 优化 移除 fsql.Transaction 线程事务超时机制;#323

This commit is contained in:
28810 2020-05-23 18:55:33 +08:00
parent ce3bd7da1d
commit b3352faef5
18 changed files with 33 additions and 74 deletions

View File

@ -30,8 +30,7 @@ namespace FreeSql
public void Dispose() { } public void Dispose() { }
public void Transaction(Action handler) => _originalFsql.Transaction(handler); public void Transaction(Action handler) => _originalFsql.Transaction(handler);
public void Transaction(TimeSpan timeout, Action handler) => _originalFsql.Transaction(timeout, handler); public void Transaction(IsolationLevel isolationLevel, Action handler) => _originalFsql.Transaction(isolationLevel, handler);
public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => _originalFsql.Transaction(isolationLevel, timeout, handler);
public ISelect<T1> Select<T1>() where T1 : class public ISelect<T1> Select<T1>() where T1 : class
{ {

View File

@ -2257,25 +2257,17 @@
</summary> </summary>
</member> </member>
<member name="M:FreeSql.IAdo.Transaction(System.Action)"> <member name="M:FreeSql.IAdo.Transaction(System.Action)">
<summary>
开启事务不支持异步60秒未执行完成可能被其他线程事务自动提交
</summary>
<param name="handler">事务体 () => {}</param>
</member>
<member name="M:FreeSql.IAdo.Transaction(System.TimeSpan,System.Action)">
<summary> <summary>
开启事务(不支持异步) 开启事务(不支持异步)
</summary> </summary>
<param name="timeout">超时,未执行完成(可能)被其他线程事务自动提交</param>
<param name="handler">事务体 () => {}</param> <param name="handler">事务体 () => {}</param>
</member> </member>
<member name="M:FreeSql.IAdo.Transaction(System.Data.IsolationLevel,System.TimeSpan,System.Action)"> <member name="M:FreeSql.IAdo.Transaction(System.Data.IsolationLevel,System.Action)">
<summary> <summary>
开启事务(不支持异步) 开启事务(不支持异步)
</summary> </summary>
<param name="isolationLevel"></param> <param name="isolationLevel"></param>
<param name="handler">事务体 () => {}</param> <param name="handler">事务体 () => {}</param>
<param name="timeout">超时,未执行完成(可能)被其他线程事务自动提交</param>
</member> </member>
<member name="P:FreeSql.IAdo.TransactionCurrentThread"> <member name="P:FreeSql.IAdo.TransactionCurrentThread">
<summary> <summary>
@ -3829,24 +3821,18 @@
</member> </member>
<member name="M:IFreeSql.Transaction(System.Action)"> <member name="M:IFreeSql.Transaction(System.Action)">
<summary> <summary>
开启事务不支持异步60秒未执行完成可能被其他线程事务自动提交 开启事务(不支持异步)<para></para>
v1.5.0 关闭了线程事务超时自动提交的机制
</summary> </summary>
<param name="handler">事务体 () => {}</param> <param name="handler">事务体 () => {}</param>
</member> </member>
<member name="M:IFreeSql.Transaction(System.TimeSpan,System.Action)"> <member name="M:IFreeSql.Transaction(System.Data.IsolationLevel,System.Action)">
<summary> <summary>
开启事务(不支持异步) 开启事务(不支持异步)<para></para>
</summary> v1.5.0 关闭了线程事务超时自动提交的机制
<param name="timeout">超时,未执行完成(可能)被其他线程事务自动提交</param>
<param name="handler">事务体 () => {}</param>
</member>
<member name="M:IFreeSql.Transaction(System.Data.IsolationLevel,System.TimeSpan,System.Action)">
<summary>
开启事务(不支持异步)
</summary> </summary>
<param name="isolationLevel"></param> <param name="isolationLevel"></param>
<param name="handler">事务体 () => {}</param> <param name="handler">事务体 () => {}</param>
<param name="timeout">超时,未执行完成(可能)被其他线程事务自动提交</param>
</member> </member>
<member name="P:IFreeSql.Ado"> <member name="P:IFreeSql.Ado">
<summary> <summary>

View File

@ -39,23 +39,16 @@ namespace FreeSql
#region #region
/// <summary> /// <summary>
/// 开启事务(不支持异步)60秒未执行完成可能被其他线程事务自动提交 /// 开启事务(不支持异步)
/// </summary> /// </summary>
/// <param name="handler">事务体 () => {}</param> /// <param name="handler">事务体 () => {}</param>
void Transaction(Action handler); void Transaction(Action handler);
/// <summary> /// <summary>
/// 开启事务(不支持异步) /// 开启事务(不支持异步)
/// </summary> /// </summary>
/// <param name="timeout">超时,未执行完成(可能)被其他线程事务自动提交</param>
/// <param name="handler">事务体 () => {}</param>
void Transaction(TimeSpan timeout, Action handler);
/// <summary>
/// 开启事务(不支持异步)
/// </summary>
/// <param name="isolationLevel"></param> /// <param name="isolationLevel"></param>
/// <param name="handler">事务体 () => {}</param> /// <param name="handler">事务体 () => {}</param>
/// <param name="timeout">超时,未执行完成(可能)被其他线程事务自动提交</param> void Transaction(IsolationLevel isolationLevel, Action handler);
void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler);
/// <summary> /// <summary>
/// 当前线程的事务 /// 当前线程的事务
/// </summary> /// </summary>

View File

@ -101,23 +101,18 @@ public interface IFreeSql : IDisposable
IDelete<T1> Delete<T1>(object dywhere) where T1 : class; IDelete<T1> Delete<T1>(object dywhere) where T1 : class;
/// <summary> /// <summary>
/// 开启事务不支持异步60秒未执行完成可能被其他线程事务自动提交 /// 开启事务(不支持异步)<para></para>
/// v1.5.0 关闭了线程事务超时自动提交的机制
/// </summary> /// </summary>
/// <param name="handler">事务体 () => {}</param> /// <param name="handler">事务体 () => {}</param>
void Transaction(Action handler); void Transaction(Action handler);
/// <summary> /// <summary>
/// 开启事务(不支持异步) /// 开启事务(不支持异步)<para></para>
/// </summary> /// v1.5.0 关闭了线程事务超时自动提交的机制
/// <param name="timeout">超时,未执行完成(可能)被其他线程事务自动提交</param>
/// <param name="handler">事务体 () => {}</param>
void Transaction(TimeSpan timeout, Action handler);
/// <summary>
/// 开启事务(不支持异步)
/// </summary> /// </summary>
/// <param name="isolationLevel"></param> /// <param name="isolationLevel"></param>
/// <param name="handler">事务体 () => {}</param> /// <param name="handler">事务体 () => {}</param>
/// <param name="timeout">超时,未执行完成(可能)被其他线程事务自动提交</param> void Transaction(IsolationLevel isolationLevel, Action handler);
void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler);
/// <summary> /// <summary>
/// 数据库访问对象 /// 数据库访问对象

View File

@ -35,7 +35,7 @@ namespace FreeSql.Internal.CommonProvider
public DbTransaction TransactionCurrentThread => _trans.TryGetValue(Thread.CurrentThread.ManagedThreadId, out var conn) && conn.Transaction?.Connection != null ? conn.Transaction : null; public DbTransaction TransactionCurrentThread => _trans.TryGetValue(Thread.CurrentThread.ManagedThreadId, out var conn) && conn.Transaction?.Connection != null ? conn.Transaction : null;
public Aop.TraceBeforeEventArgs TransactionCurrentThreadAopBefore => _trans.TryGetValue(Thread.CurrentThread.ManagedThreadId, out var conn) && conn.Transaction?.Connection != null ? conn.AopBefore : null; public Aop.TraceBeforeEventArgs TransactionCurrentThreadAopBefore => _trans.TryGetValue(Thread.CurrentThread.ManagedThreadId, out var conn) && conn.Transaction?.Connection != null ? conn.AopBefore : null;
public void BeginTransaction(TimeSpan timeout, IsolationLevel? isolationLevel) public void BeginTransaction(IsolationLevel? isolationLevel)
{ {
if (TransactionCurrentThread != null) return; if (TransactionCurrentThread != null) return;
@ -48,7 +48,7 @@ namespace FreeSql.Internal.CommonProvider
try try
{ {
conn = MasterPool.Get(); conn = MasterPool.Get();
tran = new Transaction2(conn, isolationLevel == null ? conn.Value.BeginTransaction() : conn.Value.BeginTransaction(isolationLevel.Value), timeout); tran = new Transaction2(conn, isolationLevel == null ? conn.Value.BeginTransaction() : conn.Value.BeginTransaction(isolationLevel.Value), TimeSpan.FromSeconds(60));
tran.AopBefore = before; tran.AopBefore = before;
} }
catch (Exception ex) catch (Exception ex)
@ -107,15 +107,14 @@ namespace FreeSql.Internal.CommonProvider
if (_trans.TryGetValue(Thread.CurrentThread.ManagedThreadId, out var tran)) CommitTransaction(false, tran, ex); if (_trans.TryGetValue(Thread.CurrentThread.ManagedThreadId, out var tran)) CommitTransaction(false, tran, ex);
} }
public void Transaction(Action handler) => TransactionInternal(null, TimeSpan.FromSeconds(60), handler); public void Transaction(Action handler) => TransactionInternal(null, handler);
public void Transaction(TimeSpan timeout, Action handler) => TransactionInternal(null, timeout, handler); public void Transaction(IsolationLevel isolationLevel, Action handler) => TransactionInternal(isolationLevel, handler);
public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => TransactionInternal(isolationLevel, timeout, handler);
void TransactionInternal(IsolationLevel? isolationLevel, TimeSpan timeout, Action handler) void TransactionInternal(IsolationLevel? isolationLevel, Action handler)
{ {
try try
{ {
BeginTransaction(timeout, isolationLevel); BeginTransaction(isolationLevel);
handler(); handler();
CommitTransaction(); CommitTransaction();
} }

View File

@ -46,8 +46,7 @@ namespace FreeSql.Dameng
internal CommonExpression InternalCommonExpression { get; } internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler); public void Transaction(Action handler) => Ado.Transaction(handler);
public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); public void Transaction(IsolationLevel isolationLevel, Action handler) => Ado.Transaction(isolationLevel, handler);
public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); public GlobalFilter GlobalFilter { get; } = new GlobalFilter();

View File

@ -45,8 +45,7 @@ namespace FreeSql.MsAccess
internal CommonExpression InternalCommonExpression { get; } internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler); public void Transaction(Action handler) => Ado.Transaction(handler);
public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); public void Transaction(IsolationLevel isolationLevel, Action handler) => Ado.Transaction(isolationLevel, handler);
public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); public GlobalFilter GlobalFilter { get; } = new GlobalFilter();

View File

@ -72,8 +72,7 @@ namespace FreeSql.MySql
internal CommonExpression InternalCommonExpression { get; } internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler); public void Transaction(Action handler) => Ado.Transaction(handler);
public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); public void Transaction(IsolationLevel isolationLevel, Action handler) => Ado.Transaction(isolationLevel, handler);
public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); public GlobalFilter GlobalFilter { get; } = new GlobalFilter();

View File

@ -45,8 +45,7 @@ namespace FreeSql.Odbc.Dameng
internal CommonExpression InternalCommonExpression { get; } internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler); public void Transaction(Action handler) => Ado.Transaction(handler);
public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); public void Transaction(IsolationLevel isolationLevel, Action handler) => Ado.Transaction(isolationLevel, handler);
public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); public GlobalFilter GlobalFilter { get; } = new GlobalFilter();

View File

@ -86,8 +86,7 @@ namespace FreeSql.Odbc.Default
internal CommonExpression InternalCommonExpression { get; } internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler); public void Transaction(Action handler) => Ado.Transaction(handler);
public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); public void Transaction(IsolationLevel isolationLevel, Action handler) => Ado.Transaction(isolationLevel, handler);
public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); public GlobalFilter GlobalFilter { get; } = new GlobalFilter();

View File

@ -50,8 +50,7 @@ namespace FreeSql.Odbc.MySql
internal CommonExpression InternalCommonExpression { get; } internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler); public void Transaction(Action handler) => Ado.Transaction(handler);
public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); public void Transaction(IsolationLevel isolationLevel, Action handler) => Ado.Transaction(isolationLevel, handler);
public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); public GlobalFilter GlobalFilter { get; } = new GlobalFilter();

View File

@ -51,8 +51,7 @@ namespace FreeSql.Odbc.Oracle
internal CommonExpression InternalCommonExpression { get; } internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler); public void Transaction(Action handler) => Ado.Transaction(handler);
public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); public void Transaction(IsolationLevel isolationLevel, Action handler) => Ado.Transaction(isolationLevel, handler);
public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); public GlobalFilter GlobalFilter { get; } = new GlobalFilter();

View File

@ -49,8 +49,7 @@ namespace FreeSql.Odbc.PostgreSQL
internal CommonExpression InternalCommonExpression { get; } internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler); public void Transaction(Action handler) => Ado.Transaction(handler);
public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); public void Transaction(IsolationLevel isolationLevel, Action handler) => Ado.Transaction(isolationLevel, handler);
public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); public GlobalFilter GlobalFilter { get; } = new GlobalFilter();

View File

@ -57,8 +57,7 @@ namespace FreeSql.Odbc.SqlServer
internal CommonExpression InternalCommonExpression { get; } internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler); public void Transaction(Action handler) => Ado.Transaction(handler);
public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); public void Transaction(IsolationLevel isolationLevel, Action handler) => Ado.Transaction(isolationLevel, handler);
public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); public GlobalFilter GlobalFilter { get; } = new GlobalFilter();

View File

@ -46,8 +46,7 @@ namespace FreeSql.Oracle
internal CommonExpression InternalCommonExpression { get; } internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler); public void Transaction(Action handler) => Ado.Transaction(handler);
public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); public void Transaction(IsolationLevel isolationLevel, Action handler) => Ado.Transaction(isolationLevel, handler);
public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); public GlobalFilter GlobalFilter { get; } = new GlobalFilter();

View File

@ -99,8 +99,7 @@ namespace FreeSql.PostgreSQL
internal CommonExpression InternalCommonExpression { get; } internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler); public void Transaction(Action handler) => Ado.Transaction(handler);
public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); public void Transaction(IsolationLevel isolationLevel, Action handler) => Ado.Transaction(isolationLevel, handler);
public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); public GlobalFilter GlobalFilter { get; } = new GlobalFilter();

View File

@ -58,8 +58,7 @@ namespace FreeSql.SqlServer
internal CommonExpression InternalCommonExpression { get; } internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler); public void Transaction(Action handler) => Ado.Transaction(handler);
public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); public void Transaction(IsolationLevel isolationLevel, Action handler) => Ado.Transaction(isolationLevel, handler);
public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); public GlobalFilter GlobalFilter { get; } = new GlobalFilter();

View File

@ -47,8 +47,7 @@ namespace FreeSql.Sqlite
internal CommonExpression InternalCommonExpression { get; } internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler); public void Transaction(Action handler) => Ado.Transaction(handler);
public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); public void Transaction(IsolationLevel isolationLevel, Action handler) => Ado.Transaction(isolationLevel, handler);
public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); public GlobalFilter GlobalFilter { get; } = new GlobalFilter();