首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在有`DBconnection.CloseAsync()`时没有`DBconnection.OpenAsync()`?

为什么在有`DBconnection.CloseAsync()`时没有`DBconnection.OpenAsync()`?
EN

Stack Overflow用户
提问于 2015-07-01 19:43:40
回答 2查看 2.1K关注 0票数 1

我要把我们的DAL改成async DAL。

看:

await _conn.OpenAsync().ConfigureAwait(false);

我看到有一个用于打开async的connection.But方法,为什么没有关闭连接的异步方法?

  • 共享连接可能被其他人使用。
  • 可能返回到连接池。
  • 这是一个I/O操作。
  • 可能的延迟/耗时操作

(以上四点我可能都错了:-)

问题

在我看来,应该有一个连接的async close方法,这似乎是合乎逻辑的。

有什么原因吗?

PS我很明显会在最后使用DAPPER,但只是为了练习,我决定创建小型迷你dapper类似DAL。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-01 19:58:59

共享连接可能被其他人使用。

为什么这要花很长时间才能把电话联系上呢?如果有的话,这将意味着,在连接仍然被其他人使用的情况下,所有的“关闭”意味着您不再需要它,并且实际的底层连接不需要关闭。

这是一个I/O操作。

不一定。正如您所说的,如果它是池/共享的,那么它只是返回到池中,则根本不会发生IO。

是什么让你认为,即使潜在的连接被关闭,也需要很长的时间。所有这些需要发生的是停止对连接的关注,可能会通过连接发送一条礼貌的信息,说你已经完成了。不会花很长时间的。您不需要等待对这种消息的任何类型的响应,所以在此方法中不需要等待完成的网络往返。

可能的延迟/耗时操作

为什么要花时间呢?如果它被延迟了(例如,如果连接是池的,并且当您是它的最后一个用户时关闭它),这意味着它很可能会在一段时间后关闭,但是您不需要等待它。

将一个对象标记为“不再使用”并不费时,而且在一天结束时,您真正要做的就是这些。

票数 4
EN

Stack Overflow用户

发布于 2015-07-01 19:59:43

事实上,IDbConnection接口(开发ADO.NET连接提供程序和其他接口(如IDbCommand)所需的接口)没有提供OpenAsync

因此,OpenAsyncDBConnection的实现细节,例如,它是System.Data.SqlClient.SqlConnection的基类。

为什么没有CloseAsync__?这应该被问到.NET框架开发团队成员。当有这样的设计决策时,通常是出于某种特定的需求,无论是在框架本身,还是在Microsoft或某个合作伙伴开发的基于.NET的解决方案中。也许这里有一个潜在的问题:为什么IDbConnection不同时定义OpenClose异步风格?为了避免存在代码的中断更改,IDbConnectionAsync接口如何?

顺便说一句,我怀疑打开连接比关闭连接花费更多的时间,因为关闭过程可以排队,因为调用方只是期望一个OK --我会(从数据库服务器)这样做--同时打开一个连接--这不仅仅是发送信号,而且是连接本身的立即可用性。

由于网络连接可能减缓连接打开过程,这似乎是将其作为异步操作实现的主要原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31170297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档