1

我正在开发一个 Win 8 RT 应用程序,该应用程序必须将一些数据从 Web 服务合并到本地 SQLite 数据库,并且我已经实现了这种方法来仅在事务中更新数据库。

int result;

                await MyDatabaseManager.Connection.RunInTransactionAsync(async (connection) =>
                {
                    foreach (Hotel _hotel in listUpdates)
                    {
                        result = await connection.UpdateAsync(_hotel);

                        if (result == 0)
                        {
                            await MyDatabaseManager.Connection.InsertAsync(_hotel);
                        }
                    }

                });

但是,我不知道为什么,当await connection.UpdateAsync(_hotel);被调用时,它会破坏 for bucle,并退出函数而不抛出任何异常或返回任何错误。

如果我评论 RunInTransactionAsync 行,一切正常。

任何想法??

提前致谢。

4

1 回答 1

4

您正在使用的库没有最好的async支持(请参阅我是否应该为同步方法公开异步包装器以描述该方法存在缺陷的原因)。

您需要使用RunInTransactionAsync(Action<SQLiteConnection>)重载而不是RunInTransactionAsync (Action<SQLiteAsyncConnection>). 应该这样做(在升级到最新版本的 sqlite-net 之后):

await MyDatabaseManager.Connection.RunInTransactionAsync((SQLiteConnection connection) =>
{
  foreach (Hotel _hotel in listUpdates)
  {
    result = connection.Update(_hotel);

    if (result == 0)
    {
      connection.Insert(_hotel);
    }
  }
});
于 2012-08-17T11:12:19.057 回答