diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/DbConnectionPool.cs b/FreeSql/Internal/CommonProvider/AdoProvider/DbConnectionPool.cs index 7dd3fa6c9..b446f226c 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/DbConnectionPool.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/DbConnectionPool.cs @@ -69,11 +69,11 @@ namespace FreeSql.Internal.CommonProvider #if net40 #else - async public Task> GetAsync() + async public Task> GetAsync(CancellationToken cancellationToken) { var conn = _connectionFactory(); if (conn.State != ConnectionState.Open) - await conn.OpenAsync(); + await conn.OpenAsync(cancellationToken); return Object.InitWith(this, Interlocked.Increment(ref _id), conn); } #endif @@ -128,11 +128,11 @@ namespace FreeSql.Internal.CommonProvider #if net40 #else - async public Task> GetAsync() + async public Task> GetAsync(CancellationToken cancellationToken) { var conn = _connectionFactory(); if (conn.State != ConnectionState.Open) - await conn.OpenAsync(); + await conn.OpenAsync(cancellationToken); return Object.InitWith(this, Interlocked.Increment(ref _id), conn); } #endif @@ -195,7 +195,7 @@ namespace FreeSql.Internal.CommonProvider #if net40 #else - public Task OnGetAsync(Object obj) + public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { return Task.FromResult(true); } diff --git a/FreeSql/Internal/ObjectPool/IObjectPool.cs b/FreeSql/Internal/ObjectPool/IObjectPool.cs index 5a8e896b8..724db4c90 100644 --- a/FreeSql/Internal/ObjectPool/IObjectPool.cs +++ b/FreeSql/Internal/ObjectPool/IObjectPool.cs @@ -1,4 +1,5 @@ using System; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.Internal.ObjectPool @@ -49,7 +50,7 @@ namespace FreeSql.Internal.ObjectPool /// 获取资源 /// /// - Task> GetAsync(); + Task> GetAsync(CancellationToken cancellationToken = default); #endif /// diff --git a/FreeSql/Internal/ObjectPool/IPolicy.cs b/FreeSql/Internal/ObjectPool/IPolicy.cs index a4662db18..b9844ef5e 100644 --- a/FreeSql/Internal/ObjectPool/IPolicy.cs +++ b/FreeSql/Internal/ObjectPool/IPolicy.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.Internal.ObjectPool @@ -81,7 +82,7 @@ namespace FreeSql.Internal.ObjectPool /// 从对象池获取对象成功的时候触发,通过该方法统计或初始化对象 /// /// 资源对象 - Task OnGetAsync(Object obj); + Task OnGetAsync(Object obj, CancellationToken cancellationToken); #endif /// diff --git a/FreeSql/Internal/ObjectPool/ObjectPool.cs b/FreeSql/Internal/ObjectPool/ObjectPool.cs index 15c4e1e43..79b755d84 100644 --- a/FreeSql/Internal/ObjectPool/ObjectPool.cs +++ b/FreeSql/Internal/ObjectPool/ObjectPool.cs @@ -366,7 +366,7 @@ namespace FreeSql.Internal.ObjectPool #if net40 #else - async public Task> GetAsync() + async public Task> GetAsync(CancellationToken cancellationToken) { var obj = GetFree(true); if (obj == null) @@ -400,7 +400,7 @@ namespace FreeSql.Internal.ObjectPool try { - await Policy.OnGetAsync(obj); + await Policy.OnGetAsync(obj, cancellationToken); } catch { diff --git a/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseConnectionPool.cs b/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseConnectionPool.cs index fd4b9436e..00c5b46aa 100644 --- a/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseConnectionPool.cs +++ b/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseConnectionPool.cs @@ -1,12 +1,12 @@ -using FreeSql.Internal.ObjectPool; +using ClickHouse.Driver.ADO; +using FreeSql.Internal.ObjectPool; using System; using System.Collections.Concurrent; -using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; -using ClickHouse.Driver.ADO; namespace FreeSql.ClickHouse { @@ -154,7 +154,7 @@ namespace FreeSql.ClickHouse #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -165,12 +165,12 @@ namespace FreeSql.ClickHouse throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } - if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) + if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -231,11 +231,11 @@ namespace FreeSql.ClickHouse #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch diff --git a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengConnectionPool.cs b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengConnectionPool.cs index 07c8b7389..03268e05e 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengConnectionPool.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengConnectionPool.cs @@ -5,6 +5,7 @@ using System.Collections.Concurrent; using System.Data; using System.Data.Common; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.Dameng @@ -153,7 +154,7 @@ namespace FreeSql.Dameng #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -164,12 +165,12 @@ namespace FreeSql.Dameng throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } - if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) + if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -230,11 +231,11 @@ namespace FreeSql.Dameng #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch diff --git a/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbConnectionPool.cs b/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbConnectionPool.cs index 040474d77..9585093d2 100644 --- a/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbConnectionPool.cs +++ b/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbConnectionPool.cs @@ -6,6 +6,7 @@ using System.Data.Common; using System.Linq; using System.Text; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.Duckdb @@ -126,7 +127,7 @@ namespace FreeSql.Duckdb #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -135,7 +136,7 @@ namespace FreeSql.Duckdb throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); if (obj.Value.State != ConnectionState.Open) - await obj.Value.OpenAndAttachAsync(Attaches); + await obj.Value.OpenAndAttachAsync(Attaches, cancellationToken); } } #endif @@ -206,26 +207,9 @@ namespace FreeSql.Duckdb #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task OpenAndAttachAsync(this DbConnection that, string[] attach, CancellationToken cancellationToken = default) { - try - { - using (var cmd = PingCommand(that)) - { - await cmd.ExecuteNonQueryAsync(); - } - return true; - } - catch - { - if (that.State != ConnectionState.Closed) try { that.Close(); } catch { } - if (isThrow) throw; - return false; - } - } - async public static Task OpenAndAttachAsync(this DbConnection that, string[] attach) - { - await that.OpenAsync(); + await that.OpenAsync(cancellationToken); if (attach?.Any() == true) { @@ -235,7 +219,7 @@ namespace FreeSql.Duckdb var cmd = that.CreateCommand(); cmd.CommandText = sb.ToString(); - await cmd.ExecuteNonQueryAsync(); + await cmd.ExecuteNonQueryAsync(cancellationToken); cmd.Dispose(); } } diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdConnectionPool.cs b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdConnectionPool.cs index 8be15c361..bb5eec8eb 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdConnectionPool.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdConnectionPool.cs @@ -2,10 +2,10 @@ using FreeSql.Internal.ObjectPool; using System; using System.Collections.Concurrent; -using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.Firebird @@ -124,7 +124,7 @@ namespace FreeSql.Firebird #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -133,7 +133,7 @@ namespace FreeSql.Firebird throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); if (obj.Value.State != ConnectionState.Open) - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } } #endif @@ -183,23 +183,5 @@ namespace FreeSql.Firebird return false; } } - -#if net40 -#else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) - { - try - { - await PingCommand(that).ExecuteNonQueryAsync(); - return true; - } - catch - { - if (that.State != ConnectionState.Closed) try { that.Close(); } catch { } - if (isThrow) throw; - return false; - } - } -#endif } } diff --git a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs index 79ca7e75a..e223600a7 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs @@ -1,11 +1,11 @@ using FreeSql.Internal.ObjectPool; using System; using System.Collections.Concurrent; -using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.Odbc; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.GBase @@ -143,7 +143,7 @@ namespace FreeSql.GBase #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -154,12 +154,12 @@ namespace FreeSql.GBase throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } - if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) + if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -220,11 +220,11 @@ namespace FreeSql.GBase #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs index 902739411..827e1d71a 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs @@ -2,11 +2,10 @@ using Kdbndp; using System; using System.Collections.Concurrent; -using System.Collections.Generic; using System.Data; using System.Data.Common; -using System.Text; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.KingbaseES @@ -154,7 +153,7 @@ namespace FreeSql.KingbaseES #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -165,12 +164,12 @@ namespace FreeSql.KingbaseES throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } - if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) + if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -231,11 +230,11 @@ namespace FreeSql.KingbaseES #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs index ba5cade0d..05b2acf89 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs @@ -1,11 +1,10 @@ using FreeSql.Internal.ObjectPool; using System; -using System.Collections.Concurrent; -using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.OleDb; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.MsAccess @@ -123,7 +122,7 @@ namespace FreeSql.MsAccess #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -133,7 +132,7 @@ namespace FreeSql.MsAccess throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); if (obj.Value.State != ConnectionState.Open) - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } } #endif @@ -183,23 +182,5 @@ namespace FreeSql.MsAccess return false; } } - -#if net40 -#else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) - { - try - { - await PingCommand(that).ExecuteNonQueryAsync(); - return true; - } - catch - { - if (that.State != ConnectionState.Closed) try { that.Close(); } catch { } - if (isThrow) throw; - return false; - } - } -#endif } } diff --git a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs index 4a8d42d24..543285ebd 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs @@ -1,11 +1,12 @@ using FreeSql.Internal.ObjectPool; using System; using System.Collections.Concurrent; -using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Text.RegularExpressions; using System.Threading.Tasks; +using System.Threading; + #if MySqlConnector using MySqlConnector; #else @@ -148,7 +149,7 @@ namespace FreeSql.MySql #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -159,12 +160,12 @@ namespace FreeSql.MySql throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } - if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) + if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -225,11 +226,11 @@ namespace FreeSql.MySql #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs index 721fd9004..824695f5d 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs @@ -1,11 +1,11 @@ using FreeSql.Internal.ObjectPool; using System; using System.Collections.Concurrent; -using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.Odbc; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.Odbc.Default @@ -144,7 +144,7 @@ namespace FreeSql.Odbc.Default #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -156,12 +156,12 @@ namespace FreeSql.Odbc.Default throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } - if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) + if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -222,11 +222,11 @@ namespace FreeSql.Odbc.Default #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs index 99e946438..c775a7298 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs @@ -1,11 +1,11 @@ using FreeSql.Internal.ObjectPool; using System; using System.Collections.Concurrent; -using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.Odbc; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.Odbc.MySql @@ -143,7 +143,7 @@ namespace FreeSql.Odbc.MySql #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -154,12 +154,12 @@ namespace FreeSql.Odbc.MySql throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } - if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) + if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -220,11 +220,11 @@ namespace FreeSql.Odbc.MySql #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs index d279d94cd..00c8d40b3 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs @@ -1,12 +1,11 @@ using FreeSql.Internal.ObjectPool; using System; using System.Collections.Concurrent; -using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.Odbc; -using System.Text; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.Odbc.Oracle @@ -154,7 +153,7 @@ namespace FreeSql.Odbc.Oracle #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -165,12 +164,12 @@ namespace FreeSql.Odbc.Oracle throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } - if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) + if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -231,11 +230,11 @@ namespace FreeSql.Odbc.Oracle #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs index 4154e7cac..1e58c5bdf 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs @@ -1,12 +1,11 @@ using FreeSql.Internal.ObjectPool; using System; using System.Collections.Concurrent; -using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.Odbc; -using System.Text; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.Odbc.PostgreSQL @@ -144,7 +143,7 @@ namespace FreeSql.Odbc.PostgreSQL #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -155,12 +154,12 @@ namespace FreeSql.Odbc.PostgreSQL throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } - if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) + if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -221,11 +220,11 @@ namespace FreeSql.Odbc.PostgreSQL #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs index 5474bddce..b6d10a8a6 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs @@ -1,11 +1,11 @@ using FreeSql.Internal.ObjectPool; using System; using System.Collections.Concurrent; -using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.Odbc; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.Odbc.SqlServer @@ -144,7 +144,7 @@ namespace FreeSql.Odbc.SqlServer #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -156,12 +156,12 @@ namespace FreeSql.Odbc.SqlServer throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } - if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) + if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -222,11 +222,11 @@ namespace FreeSql.Odbc.SqlServer #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch diff --git a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs index f1dd621c9..3be98d491 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs @@ -12,6 +12,7 @@ using System.Data; using System.Data.Common; using System.Text.RegularExpressions; using System.Threading.Tasks; +using System.Threading; namespace FreeSql.Oracle { @@ -164,7 +165,7 @@ namespace FreeSql.Oracle #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -175,12 +176,12 @@ namespace FreeSql.Oracle throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } - if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) + if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -241,11 +242,11 @@ namespace FreeSql.Oracle #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs index 0845d2c71..75ab77d56 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs @@ -1,12 +1,11 @@ -using Npgsql; -using FreeSql.Internal.ObjectPool; +using FreeSql.Internal.ObjectPool; +using Npgsql; using System; using System.Collections.Concurrent; -using System.Collections.Generic; using System.Data; using System.Data.Common; -using System.Text; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.PostgreSQL @@ -145,7 +144,7 @@ namespace FreeSql.PostgreSQL #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -156,12 +155,12 @@ namespace FreeSql.PostgreSQL throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } - if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) + if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -222,11 +221,11 @@ namespace FreeSql.PostgreSQL #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch diff --git a/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbConnectionPool.cs b/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbConnectionPool.cs index eeb544119..02e826d29 100644 --- a/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbConnectionPool.cs +++ b/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbConnectionPool.cs @@ -1,12 +1,11 @@ -using Npgsql; -using FreeSql.Internal.ObjectPool; +using FreeSql.Internal.ObjectPool; +using Npgsql; using System; using System.Collections.Concurrent; -using System.Collections.Generic; using System.Data; using System.Data.Common; -using System.Text; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.QuestDb @@ -145,7 +144,7 @@ namespace FreeSql.QuestDb #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -156,12 +155,12 @@ namespace FreeSql.QuestDb throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } - if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) + if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -222,11 +221,11 @@ namespace FreeSql.QuestDb #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs index fc556e2d5..7aff9b929 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs @@ -5,6 +5,7 @@ using System.Data; using System.Data.Common; using System.Data.OscarClient; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.ShenTong @@ -143,7 +144,7 @@ namespace FreeSql.ShenTong #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -154,12 +155,12 @@ namespace FreeSql.ShenTong throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } - if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) + if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -220,11 +221,11 @@ namespace FreeSql.ShenTong #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs index b1d6d5d11..446e7d92e 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs @@ -1,7 +1,6 @@ using FreeSql.Internal.ObjectPool; using System; using System.Collections.Concurrent; -using System.Collections.Generic; using System.Data; using System.Data.Common; #if microsoft @@ -10,6 +9,7 @@ using Microsoft.Data.SqlClient; using System.Data.SqlClient; #endif using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.SqlServer @@ -148,7 +148,7 @@ namespace FreeSql.SqlServer } #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -160,11 +160,11 @@ namespace FreeSql.SqlServer throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } - if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) + if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -223,11 +223,11 @@ namespace FreeSql.SqlServer } #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs index e4bb5fa38..3f8a5deef 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs @@ -11,6 +11,7 @@ using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; +using System.Threading; namespace FreeSql.Sqlite { @@ -164,7 +165,7 @@ namespace FreeSql.Sqlite #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -173,7 +174,7 @@ namespace FreeSql.Sqlite throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); if (obj.Value.State != ConnectionState.Open) - await obj.Value.OpenAndAttachAsync(Attaches); + await obj.Value.OpenAndAttachAsync(Attaches, cancellationToken); } } #endif @@ -244,26 +245,9 @@ namespace FreeSql.Sqlite #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task OpenAndAttachAsync(this DbConnection that, string[] attach, CancellationToken cancellationToken = default) { - try - { - using (var cmd = PingCommand(that)) - { - await cmd.ExecuteNonQueryAsync(); - } - return true; - } - catch - { - if (that.State != ConnectionState.Closed) try { that.Close(); } catch { } - if (isThrow) throw; - return false; - } - } - async public static Task OpenAndAttachAsync(this DbConnection that, string[] attach) - { - await that.OpenAsync(); + await that.OpenAsync(cancellationToken); if (attach?.Any() == true) { @@ -273,7 +257,7 @@ namespace FreeSql.Sqlite var cmd = that.CreateCommand(); cmd.CommandText = sb.ToString(); - await cmd.ExecuteNonQueryAsync(); + await cmd.ExecuteNonQueryAsync(cancellationToken); cmd.Dispose(); } } diff --git a/Providers/FreeSql.Provider.TDengine/TDengineAdo/TDengineConnectionPool.cs b/Providers/FreeSql.Provider.TDengine/TDengineAdo/TDengineConnectionPool.cs index 15042e265..4dd28cb23 100644 --- a/Providers/FreeSql.Provider.TDengine/TDengineAdo/TDengineConnectionPool.cs +++ b/Providers/FreeSql.Provider.TDengine/TDengineAdo/TDengineConnectionPool.cs @@ -4,10 +4,9 @@ using System.Collections.Concurrent; using System.Data; using System.Data.Common; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; using TDengine.Data.Client; -using TDengine.Driver; -using TDengine.Driver.Client; namespace FreeSql.TDengine { @@ -141,7 +140,7 @@ namespace FreeSql.TDengine #if net40 #else - public async Task OnGetAsync(Object obj) + public async Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (InternalPool.IsAvailable) { @@ -154,11 +153,11 @@ namespace FreeSql.TDengine if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && - (await obj.Value.PingAsync()) == false) + (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -228,11 +227,11 @@ namespace FreeSql.TDengine #if net40 #else - public static async Task PingAsync(this DbConnection that, bool isThrow = false) + public static async Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch diff --git a/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguConnectionPool.cs b/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguConnectionPool.cs index d584aa8e1..7c70e2e0c 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguConnectionPool.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguConnectionPool.cs @@ -4,6 +4,7 @@ using System.Collections.Concurrent; using System.Data; using System.Data.Common; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; namespace FreeSql.Xugu @@ -143,7 +144,7 @@ namespace FreeSql.Xugu #if net40 #else - async public Task OnGetAsync(Object obj) + async public Task OnGetAsync(Object obj, CancellationToken cancellationToken) { if (_pool.IsAvailable) @@ -154,12 +155,12 @@ namespace FreeSql.Xugu throw new Exception(CoreErrorStrings.S_ConnectionStringError_Check(this.Name)); } - if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false) + if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync(false, cancellationToken)) == false) { try { - await obj.Value.OpenAsync(); + await obj.Value.OpenAsync(cancellationToken); } catch (Exception ex) { @@ -220,11 +221,11 @@ namespace FreeSql.Xugu #if net40 #else - async public static Task PingAsync(this DbConnection that, bool isThrow = false) + async public static Task PingAsync(this DbConnection that, bool isThrow = false, CancellationToken cancellationToken = default) { try { - await PingCommand(that).ExecuteNonQueryAsync(); + await PingCommand(that).ExecuteNonQueryAsync(cancellationToken); return true; } catch