雪花网连接器螺纹安全吗?

Unk*_*eef 6 .net c# http snowflake-cloud-data-platform

关于snowflake .NET连接器:https://github.com/snowflakedb/snowflake-connector-net,我在文档或源代码中找不到任何内容表明支持连接池,并且因为连接本身由HttpClient,我们知道HttpClient 应该重用而不是不断创建/处置,当您要跨线程进行许多查询时,使用雪花 .NET 连接器的最佳方法是什么?

注意:我不打算在创建连接后更改连接的任何属性(架构、数据库等)。

例如:

// application startup registers this provider as a singleton
public class SnowflakeConnectionProvider : IDisposable
{
  private IDbConnection _conn;

  public SnowflakeConnectionProvider()
  {
    _conn = new SnowflakeDbConnection();
    _conn.ConnectionString = "connectionString";
    _conn.Open();
  }

  public IDbConnection conn { get => _conn; }

  public Dispose() => _conn.Close();
}
Run Code Online (Sandbox Code Playgroud)

现在,多个线程共享一个线程是否安全,SnowflakeDbConnection如下所示:

public class Worker
{
  public Worker(SnowflakeConnectionProvider provider)
  {
    IDbConnection conn = provider.conn;
    
    IDbCommand cmd = conn.CreateCommand();
    cmd.CommandText = "select * from t";
    IDataReader reader = cmd.ExecuteReader();
                
    while(reader.Read())
    {
        Console.WriteLine(reader.GetString(0));
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Fel*_*ffa 4

来自 GitHub 的摘要:连接器是线程安全的。

只要您不在雪花代码中使用任何会话变量,就可以让多个线程共享同一个 SnowflakeDbConnection。无论您是重用线程还是一直创建新线程,都没有关系。

即使您不断地从多个不同线程创建和处置连接,单个 HttpClient 也会创建一次,然后由所有连接重用和共享。

https://github.com/snowflakedb/snowflake-connector-net/issues/275