データベースにデータを挿入するasyncメソッドがあります:
public async void InsertRoutes(ObservableCollection<RouteEO> routes)
{
connection.CreateTableAsync<RouteEO>().ContinueWith((result) =>
{
Debug.WriteLine("Routes table created");
foreach (var route in routes)
{
var query = connection.Table<RouteEO>().
Where(v => v.InspectionId == route.InspectionId && v.EO_id == route.EO_id);
query.ToListAsync().ContinueWith((t) =>
{
Debug.WriteLine("Route record inserted or updated");
if (t.Result.Any())
connection.UpdateAsync(route);
else
connection.InsertAsync(route);
});
}
});
}
メソッドの実行が完了したときにのみ、それを呼び出してコードの次の行を実行したいと思います。
sqlController.InsertInspections(DataController.InspectionList);
Debug.WriteLine("Done");
しかし、このコードを起動すると、「テーブルが作成されました」および「レコードが挿入されました」というメッセージの前に、デバッグウィンドウに「完了」メッセージが表示されます。
なぜ、どのように修正できますか?
これが私の質問への答えです:https://github.com/praeclarum/sqlite-net/blob/master/tests/AsyncTests.cs
[Test]
public void TestAsyncTableQueryToListAsync ()
{
var conn = GetConnection ();
conn.CreateTableAsync<Customer> ().Wait ();
// create...
Customer customer = this.CreateCustomer ();
conn.InsertAsync (customer).Wait ();
// query...
var query = conn.Table<Customer> ();
var task = query.ToListAsync ();
task.Wait ();
var items = task.Result;
// check...
var loaded = items.Where (v => v.Id == customer.Id).First ();
Assert.AreEqual (customer.Email, loaded.Email);
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加