我要把我们的DAL改成async DAL。
看:
await _conn.OpenAsync().ConfigureAwait(false);
我看到有一个用于打开async的connection.But方法,为什么没有关闭连接的异步方法?
(以上四点我可能都错了:-)
问题
在我看来,应该有一个连接的async close方法,这似乎是合乎逻辑的。
有什么原因吗?
PS我很明显会在最后使用DAPPER,但只是为了练习,我决定创建小型迷你dapper类似DAL。
发布于 2015-07-01 19:58:59
共享连接可能被其他人使用。
为什么这要花很长时间才能把电话联系上呢?如果有的话,这将意味着,在连接仍然被其他人使用的情况下,所有的“关闭”意味着您不再需要它,并且实际的底层连接不需要关闭。
这是一个I/O操作。
不一定。正如您所说的,如果它是池/共享的,那么它只是返回到池中,则根本不会发生IO。
是什么让你认为,即使潜在的连接被关闭,也需要很长的时间。所有这些需要发生的是停止对连接的关注,可能会通过连接发送一条礼貌的信息,说你已经完成了。不会花很长时间的。您不需要等待对这种消息的任何类型的响应,所以在此方法中不需要等待完成的网络往返。
可能的延迟/耗时操作
为什么要花时间呢?如果它被延迟了(例如,如果连接是池的,并且当您是它的最后一个用户时关闭它),这意味着它很可能会在一段时间后关闭,但是您不需要等待它。
将一个对象标记为“不再使用”并不费时,而且在一天结束时,您真正要做的就是这些。
发布于 2015-07-01 19:59:43
事实上,IDbConnection接口(开发ADO.NET连接提供程序和其他接口(如IDbCommand)所需的接口)没有提供OpenAsync。
因此,OpenAsync是DBConnection的实现细节,例如,它是System.Data.SqlClient.SqlConnection的基类。
为什么没有CloseAsync__?这应该被问到.NET框架开发团队成员。当有这样的设计决策时,通常是出于某种特定的需求,无论是在框架本身,还是在Microsoft或某个合作伙伴开发的基于.NET的解决方案中。也许这里有一个潜在的问题:为什么IDbConnection不同时定义Open和Close异步风格?为了避免存在代码的中断更改,IDbConnectionAsync接口如何?
顺便说一句,我怀疑打开连接比关闭连接花费更多的时间,因为关闭过程可以排队,因为调用方只是期望一个OK --我会(从数据库服务器)这样做--同时打开一个连接--这不仅仅是发送信号,而且是连接本身的立即可用性。
由于网络连接可能减缓连接打开过程,这似乎是将其作为异步操作实现的主要原因。
https://stackoverflow.com/questions/31170297
复制相似问题