使用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