我从一开始就在我的 WinForms 客户端中使用异步操作,但仅限于某些操作。当 ExecuteReader
或 ExecuteNonQuery
完成,回调委托(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/