如何处理具有多个异步函数的 Dapper SQL 连接

How to handle Dapper SQL connection with multiple async functions

提问人:refrachnican 提问时间:8/11/2023 最后编辑:marc_srefrachnican 更新时间:8/11/2023 访问量:129

问:

我有一个关于Dapper的问题。My 包含许多异步函数,用于执行和查询各种存储过程。示例代码如下所示,并想象许多这样的函数,每隔几秒钟调用一次:SqlRepository

Public Async Function GetTemperatureMeasurements() As Task(Of List(Of TemperatureMeasurements))
        Try
            Using conn = New SqlConnection(My.Settings.SqlConn)
Return (Await conn.QueryAsync(Of TemperatureMeasurements)("dbo.GetTemperatureMeasurement", commandType:=CommandType.StoredProcedure)).ToList()
            End Using
        Catch ex As SqlException
            _ea.PublishEvent(New OnSqlError() With {.Msg = ex.Message})
            Return Nothing
        End Try
Exit function

我的问题是,在每个函数中用于打开和关闭与 Dapper 的连接是否正确,以及执行时会发生什么?Dapper 会关闭连接并正确管理连接池吗?using ... end using

由于连接池(从池获取连接之前经过的超时时间。这可能是因为所有池连接都在使用中,并且已达到最大池大小。

谢谢!

vb.net 异步 连接池 dapper 使用

评论

0赞 refrachnican 8/11/2023
但是这个例子:learn.microsoft.com/en-us/dotnet/framework/data/adonet/... 说当 sqlconnections 具有相同的连接字符串时,使用相同的池,所以我的代码应该是正确的。
1赞 jmcilhinney 8/11/2023
第一条评论有点误导,可能表明存在误解。ADO.NET 连接对象存在于较高级别。是的,您应该根据需要创建、使用、处置和丢弃它们。正如你所建议的,由于连接池,具有相同连接字符串的多个 ADO.NET 连接对象实际上将使用相同的基础数据库连接。该基础连接在使用后会保持打开状态一段时间,以防再次需要它,因此创建多个高级 ADO.NET 连接对象并不昂贵。
2赞 jmcilhinney 8/11/2023
简而言之,您可以根据需要使用任意数量的连接对象,而 ADO.NET 只会在后台使用一个。

答: 暂无答案