c# - 多个异步 SqlClient 操作 - 寻找一个很好的例子

标签 c# .net ado.net asynchronous sqlclient

我从一开始就在我的 WinForms 客户端中使用异步操作,但仅限于某些操作。当 ExecuteReaderExecuteNonQuery完成,回调委托(delegate)触发,一切正常。

我基本上有两个问题:

1) 在现实系统中处理这个问题的最佳结构是什么?我看到的所有示例都是玩具示例,其中表单处理操作完成,然后在 EndExecuteReader 上打开数据读取器。 .当然,这意味着表单与数据库的耦合比您通常希望的更紧密。当然,表格总是可以轻松调用 .Invoke对自己。我已将所有异步对象设置为从 AsyncCtrlBlock<T> 继承类,并将表单和所有回调委托(delegate)提供给我的 DAL 中异步对象的构造函数。

2) 我将重新访问程序中当前不是异步的部分。它连续进行两次调用。第一个完成后,可以填充模型的一部分。当第二部分完成时,模型的其余部分就可以完成了——但前提是第一部分已经完成。构建这个的最佳方法是什么?如果第一次读取可以完成并且由于第一次读取的处理在第二次启动时正在进行,那就太好了,但是我不希望在我知道处理之前开始第二次读取的处理第一次读取的数据已经完成。

最佳答案

关于 2)

让模型的第一阶段异步填充。 你会有类似的东西


FisrtCall();
AsyncResult arPh1 = BeginPhaseOne(); //use results from first call
SecondCall();
EndPhaseOne(arPh1); //wait until phase one is finished
PhaseTwo(); //proceed to phase two

关于c# - 多个异步 SqlClient 操作 - 寻找一个很好的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1003404/

相关文章:

.net - 逗号 "izing"项目列表

.net - 如何强制使用MSBuild版本?

c# - 更改/导航到树的特定节点?

c# - 带有 if(array[i + 1]) 的 For 循环超出数组边界;如何循环到开头?

.net - 在 docker 容器上安装 msi

c# - 如何在没有数据库表名的情况下检查与数据库的连接

c# - 将 Oracle Sql 查询中的 sql 变量值返回给 .NET 代码

c# - SQL语句中语法错误的问题

c# - 使用 LINQ 解析亚马逊商城 XML

c# - 从数组中取出两个数,使和为常数