使用C#/ .NET 3.5。SqlDataAdapter.Fill - 异步方法
目前我使用SqlDataAdapter.Fill()逐个填充2个DataTables。
我想同时填充这两个DataTables,同时通过异步执行每个DataTable。但是,没有异步版本的Fill()方法 - 即BeginFill()会很棒!
一种方法我试过是(伪):
- SqlCommand1.BeginExecuteReader // 1查询,为DataTable1
- SqlCommand2.BeginExecuteReader //第二查询,为DataTable2
- SqlCommand1.EndExecuteReader
- SqlCommand2.EndExecuteReader
- DataTable1.Load(DataReader1)
- DataTable2.Load(DataReader2)
然而,DataTable.Load()需要很长的时间:
它需要3秒执行步骤1〜步骤4
步骤5然后采取22秒。
步骤6需要17秒。
因此,步骤5和步骤6合计39秒。
最终的结果是,这并没有比仅仅执行2个SqlDataAdapter.Fills更有优势。我希望最终结果是整个过程只需要最长的查询(或尽可能接近)。
寻找推荐的方法来结束一些真正意义上的异步填充DataTable的方法。
还是我自己管理它,并滚动2个单独的线程,每个线程填充DataTable?
所以一旦我每次排队一升上来,我怎么能等到这两个已完成?我需要两个表填充,然后才能继续并处理它们 – AdaTheDev 2010-01-21 12:04:20
我已将等待概念添加到我的答案中,如果有帮助的话。 – 2010-01-21 12:05:30
@AdaTheDev,你可以使用AutoResetEvents,在工作完成之后(在每个单独的线程中)你会触发它。请参阅@Neils答案,因为他已经提供了一个示例。 – James 2010-01-21 12:08:37