Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 雪花网连接器是线程安全的吗?_C#_.net_Http_Snowflake Cloud Data Platform - Fatal编程技术网

C# 雪花网连接器是线程安全的吗?

C# 雪花网连接器是线程安全的吗?,c#,.net,http,snowflake-cloud-data-platform,C#,.net,Http,Snowflake Cloud Data Platform,关于snowflake.NET连接器:,我在文档或源代码中找不到任何建议支持连接池的内容,因为连接本身由HttpClient支持,我们知道HttpClient,在跨线程进行许多查询时,使用snowflake.NET连接器的最佳方法是什么 注意:我不打算在创建连接后更改连接的任何属性(模式、数据库等) 例如: // application startup registers this provider as a singleton public class SnowflakeConnectionP

关于snowflake.NET连接器:,我在文档或源代码中找不到任何建议支持连接池的内容,因为连接本身由
HttpClient
支持,我们知道
HttpClient
,在跨线程进行许多查询时,使用snowflake.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();
}
现在,多个线程共享一个
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));
    }
  }
}

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

只要在雪花代码中不使用任何会话变量,就可以让多个线程共享同一个雪花数据库连接。无论您是在重用线程还是一直在创建新线程,这都无关紧要

即使您不断地从多个不同的线程创建和处理连接,一个HttpClient也只创建一次,然后被所有连接重用和共享


为什么会有反对票?如果我做出了错误的假设,或者写了错误的代码,或者问了一个错误的问题,我希望知道为什么,这样我才能学习。如果有疑问,假设它不是线程安全的。这是公平的。如果它不是线程安全的,那么手动管理连接池的唯一方法是什么?我们不能简单地为每个查询打开一个新连接而不冒套接字耗尽的风险。我不知道,抱歉。这可能是一个需要向雪花开发者提出的问题。如果没有其他问题,它可能会提示他们相应地改进文档。我看到github上出现了类似的问题,请稍后检查:。这也是一个很好的地方,可以注意到JDBC连接器确实是线程安全的<代码>连接是线程安全的,可以由多个语句共享。--我不确定.net tho。