异步执行的命令是怎样的?
在 ADO。NET 2。0 以前,通过 Command 类(如 SqlCommand、OleDbCommand等)执行 SQL 命令的线程一定要停下来等待执行结果。ADO。NET 2。0 新增了异步程序访问接口(asynchronous API),让线程发出命令后可以继续执行接下去的程序代码。 而在 ADO。NET 2。0 当前的版本只有 SqlClient 支持异步程序访问接口。以往编写程序时,我们可以直接通过 。NET Framework 所提供的多线程机制,或是以 Delegate 类包装多线程的方式,在 。 NET Framework 所提供的异步架构下,设计调用执行 Comm...全部
在 ADO。NET 2。0 以前,通过 Command 类(如 SqlCommand、OleDbCommand等)执行 SQL 命令的线程一定要停下来等待执行结果。ADO。NET 2。0 新增了异步程序访问接口(asynchronous API),让线程发出命令后可以继续执行接下去的程序代码。
而在 ADO。NET 2。0 当前的版本只有 SqlClient 支持异步程序访问接口。以往编写程序时,我们可以直接通过 。NET Framework 所提供的多线程机制,或是以 Delegate 类包装多线程的方式,在 。
NET Framework 所提供的异步架构下,设计调用执行 Command 对象实例。这些方法都是让一条工作线程(Worker Thread)停止在后台中等待执行结果,一旦有结果后,工作线程再通过标准的机制告知结果。
而何谓多线程与分时多工呢?我们简单地解释一下。你可以想象自己是一个中央处理器(CPU),老板同时交付你很多的工作。在此假设有 A、B、C 三个工作,而你限制自己每小时换做一个不同的工作,所以第一个小时先做 A,时间到后换做 B,一个小时后再换做 C,如此周而复始地切换,而每一条线程就代表了使用中央处理器的单位时间与数据结构。
而你在工作时,需要从背后的公文柜中把相关的文件搬到办公桌上,时间一到就需要把正在做的数据放回到相关的公文柜中,空出桌面后再从其他的公文柜搬出下一个工作所需的数据。范例中你是 CPU,公文柜就可以类比成存储器,办公桌则是中央处理器的临时存储器。
此种线程交换的过程称为 Context Switch。当然,线程的配置还有操作系统与中央处理器的用户模式和核心模式切换、优先权顺序、堆栈配置等等诸多复杂的行为,但上述简略的类比应已经让你有了利用中央处理器时间区段所完成多线程程序运行的概念。
另外,ADO。NET 2。0 的 SqlClient 利用到 Windows 2000/XP/2003 等操作系统提供的非同步 I/O 机制,也就是每个进程(Process)只需要利用一条线程来处理所有的 I/O 需求,而不是程序设计师自己创建多条工作线程分别等待不同的执行结果。
如此可以避免整个应用程序耗在等待的工作线程,有效使用操作系统与中央处理器资源,进而提升整体系统的执行效率。12。2。1 异步执行的方法原本 ADO。NET 的 Command 对象执行 SQL 语法的方法有 ExecuteReader、ExecuteNonQuery、ExecuteXmlReader 以及 ExecuteScalar 等,搭配 。
NET Framework 原来就提供的异步模型惯例,除了 ExecuteScalar 方法外,其余的方法都新增了以 Begin 和 End 关键字开始的一对方法。也就是说 ExecuteReader 方法是同步执行,若要以异步的方式执行相同的功能,则调用 BeginExecuteReader 和 EndExecuteReader 这一组方法。
在 。
NET Framework 中,以 Begin 为字首的函数负责传入同名函数所需的参数,而以 End 为字首的函数用来取回执行结果,例如某个函数的定义如下:Function MyFun(ByVal intIn As Integer) As myObj
以上是我对于这个问题的解答,希望能够帮到大家。收起