2014-07-18 25 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