在上述范例中,我们分别通过三个 SqlCommand 对象实例对 SQL Server 分别要求三段耗时的查询,并以数组存放代表异步执行状态的 WaitHandle。主线程通过 WaitHandle 类的静态方法 WaitAny等待,只要工作线程有完成任何工作,就接手该工作结果来更新画面,而 WaitAny 的调用如下:
iHdl = System.Threading.WaitHandle.WaitAny(hdl, 5000, False)
我们设置了最多等 5 秒钟(也就是程序中的 5000 毫(103)秒),因此若等待过久,会在超时后自行抛出例外。
最后要提醒一点的是错误处理,若是 ADO.NET 自身可以检测到的错误,如参数传递个数或类型不对,连接没开等等,则在执行 Begin 函数时就会直接触发例外。但若是 DB 服务器端返回的错误,则在异步执行时,ADO.NET 的底层不能任意丢出错误,因为可能并没有上层函数的调用堆栈。只有将错误记录着,若你的程序有调用 End 函数,才丢出该异常。
责任编辑:cyth