請原諒我的無知,但我是異步編程的新手,我似乎無法弄清楚這一點。異步SQLite時序的問題
我有許多SQLite操作的Windows Phone 8應用程序。
我一直有問題,偶爾在數據庫中設置一個值,但顯然沒有及時設置它的檢索時間。但這並不一致,這就是爲什麼我想知道它是否是線程問題。
我對插入的記錄,像這樣的方法:
public async Task<string> getSetting(Settings setting)
{
string returnString = "";
string setName = setting.getName();
try
{
SQLiteAsyncConnection conn = new SQLiteAsyncConnection(Path.Combine(ApplicationData.Current.LocalFolder.Path, "newDatabase"), true);
var query = conn.Table<ClientSettings>().Where(x => x.ID == setName);
var result = await query.ToListAsync().ConfigureAwait(false);
foreach (var item in result)
{
returnString = item.Value;
}
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine("\nERROR: " + e);
}
return ret;
}
我也有檢索這些方法:
public async Task<string> getSetting(Settings setting)
{
string returnString = "";
string setName = setting.getName();
try
{
SQLiteAsyncConnection conn = new SQLiteAsyncConnection(Path.Combine(ApplicationData.Current.LocalFolder.Path, "newDatabase"), true);
var query = conn.Table<MySettings>().Where(x => x.ID == setName);
var result = await query.ToListAsync().ConfigureAwait(false);
foreach (var item in result)
{
returnString = item.Value;
}
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine("\nERROR: " + e);
}
return returnString;
}
如果我這樣稱呼它的主頁:
var insert = Constants.getData().setSetting(ExampleSetting, "userIDtest", false).Result;
string retrieving = Constants.getData().getSetting(ExampleSetting).Result;
它工作正常,並在「檢索」的下一行打印控制檯是正確的值。但是,在許多其他情況下 - 如果setSetting不返回值而是void,則該設置似乎沒有及時設置,並且getSetting不會返回設置的值。
此外,在部分應用程序中,系統會提示用戶輸入一些信息,然後將其置於數據庫中並立即用於xml web服務。儘管代碼看起來和上面完全一樣,但這似乎沒有及時設置。
這是這樣做的正確方法嗎?有沒有更好的方法來設置SQLite記錄,確保它們被設置,而不鎖定UI線程?
你有'getSetting'代碼在上面顯示兩次。我想你也想顯示'setSetting'。 – 2013-03-15 00:50:41