2017-09-13 103 views
0

有兩種類型的構造函數可以調用來初始化Sqlite連接。我知道SQLiteAsyncConnection是在執行sql語句時創建一個異步方法,而SQLiteConnection則是針對普通方法。Xamarin SQLite:什麼是不同的SQLiteAsyncConnection和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方法。

+0

你的意思是,「如果我使用SQLiteAsyncConnection而不是SQLiteConnection'? –

+0

部分是的...因爲我的代碼訪問數據庫不是標記異步,但在其他方法調用該方法可能是異步任務。 – LittleFunny

回答

0

正如你所說,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);