【问题标题】:Xamarin SQLite: What is different SQLiteAsyncConnection and SQLiteConnectionXamarin SQLite:SQLiteAsyncConnection 和 SQLiteConnection 有什么不同
【发布时间】:2017-09-13 22:25:18
【问题描述】:

我可以调用两种类型的构造函数来初始化 Sqlite 连接。我知道 SQLiteAsyncConnection 是在执行 sql 语句时创建一个异步方法,而 SQLiteConnection 是用于普通方法。

如果我有如下方法:

public object InsertVeggie(string name) 
{
   lock (locker) {
      var sql = "Some query ?";
      var result = database.Query<Model>(sql, name);
      return result;
   }        
}

如果我有异步方法:

public async Task<Model> GetModel (string name) 
{
    var data = InsertVeggie(name);
    await ProcessVeggie(data);
    return data;
}

调用方法:

Task.Run (async () => 
{ 
   var result1 = await GetModel("124");
});

Task.Run (async () => 
{ 
   var result2 = await GetModel("335");
});

如果我使用 SQLiteConnection 而不是 SQLiteAsyncConnection,是否会出现问题或必须将 InsertVeggie 更改为 Async 方法。

【问题讨论】:

  • 你的意思是,'如果我使用 SQLiteAsyncConnection 而不是 SQLiteConnection'?
  • 部分是的...因为我用于访问数据库的代码没有标记为异步,但在其他调用该方法的方法中可能是异步任务。

标签: sqlite asynchronous xamarin portable-class-library


【解决方案1】:

正如您所说,SQLiteAsyncConnection 公开了异步方法,因此您通常会从您自己的 async 方法中使用它们。

您的 InsertVeggie 方法将更改为:

public async Task<object> InsertVeggie(string name) 
{
  var sql = "Some query ?";
  var result = await database.QueryAsync<Model>(sql, name);
  return result;     
}

(请注意,您不再需要锁),您可以将其用作:

var data = await InsertVeggie(name);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 2020-10-25
    • 2011-05-22
    • 2015-11-04
    • 2012-10-30
    • 2019-10-22
    • 2015-03-27
    相关资源
    最近更新 更多