2014-07-18 28 views
-2

在我的應用程序中,我使用SOAP服務下載CSV文件,這些文件用於填充Sqlite數據庫中的不同表格。我正在使用SQLite.Net庫來進行數據庫操作。Asynchronus數據庫羣體

對於填充數據庫,我已經爲每個表編寫了方法(因爲有不同的模式)。這些方法正在同步運行。在這些方法中,我正在使用同步SQL連接的實例。

當我將我的方法從void更改爲async Task並用await調用它們時,我不知道這些方法是否完成以及何時完成。

我的問題是我應該採取什麼方法來將這些操作更改爲異步,以及在每個方法完成時如何定義事件。我從來沒有寫過事件,所以如果有人能給出一些例子說明如何做,我將不勝感激。

+0

請張貼一些代碼而不是描述代碼。 –

回答

1

從異步方法返回的Task給你你需要的。當異步方法完成時,Task類型將通知調用代碼。

利用此最簡單的方法是讓呼叫代碼使用await。例如,如果你想(異步)等待要填充的每個表:

await PopulateTable1Async(); 
await PopulateTable2Async(); 
await PopulateTable3Async(); 

或者,你可能要同時填寫所有表格,在這種情況下,你可以使用Task.WhenAll

await Task.WhenAll(PopulateTable1Async(), PopulateTable2Async(), PopulateTable3Async()); 
+0

非常感謝您的解釋,有沒有可能調用其他異步方法(填充表的那些)的異步方法可以在完成之前完成? ex async Test(){await pupulate1(); await populate2();}是否有可能Test()將在populate1或populate2之前完成? – user3455363

+0

不可以。您可以將'await'視爲「異步等待」,因此該方法在該操作完成之前不會繼續。 –

+0

好吧我已經做了1個測試,基本上按鈕單擊我同步下載文件,然後解壓縮文件並提取它的競爭分貝時我試圖跟蹤調用的方法,並通過更改標籤的文本顯示它,標籤沒有得到更新的UI保持響應,並且沒有錯誤,但是當所有這些方法完成時我怎麼能觸發事件? – user3455363