Xamarin android Sqlite.net C如何将同步查询转换为异步任务
我已经为我的xamarin android应用程序找到了一种方法,可以检查sqlite db的登录凭据。我对异步任务相当陌生,想知道如何将下面的方法更改为异步方法 我知道通过wait和将调用方法更改为异步中继命令,可以很容易地更改对方法的调用,但是如何更改查询方法呢Xamarin android Sqlite.net C如何将同步查询转换为异步任务,android,sqlite,asynchronous,xamarin,async-await,Android,Sqlite,Asynchronous,Xamarin,Async Await,我已经为我的xamarin android应用程序找到了一种方法,可以检查sqlite db的登录凭据。我对异步任务相当陌生,想知道如何将下面的方法更改为异步方法 我知道通过wait和将调用方法更改为异步中继命令,可以很容易地更改对方法的调用,但是如何更改查询方法呢 public static bool CheckLogin(string userName, string password) { bool valid = false; string
public static bool CheckLogin(string userName, string password)
{
bool valid = false;
string dbPath = Path.Combine(documentsPath, "..", dbName);
using (var conn = new SQLite.SQLiteConnection(dbPath))
{
try {
var user = conn.Query<User>("select * from tblUsers where nLogin = ? and nPassword = ?", userName, password);
if (user.Count>0)
{
valid = true;
}
}
catch(Exception ex)
{
throw ex;
}
}
return valid;
}
任何帮助都将不胜感激
public async Task<bool> CheckLogin (string userName, string password)
{
bool valid = false;
string dbPath = Path.Combine(documentsPath, "..", dbName);
using (var conn = new SQLite.SQLiteConnection(dbPath))
{enter code here
try {
var user = conn.Query<User>("select * from tblUsers where nLogin = ? and nPassword = ?", userName, password);
if (user.Count>0)
{
valid = true;
}
}
catch(Exception ex)
{
throw ex;
}
}
return valid;
}
但一般来说,这应该可以
这段代码不会阻塞调用线程,应该是您想要的
我知道您发布了想要使用SQLiteAsyncConnection的帖子,但我认为最好在您自己的一方使用异步部分代码。但这并不是真正的异步运行。我正在寻找将使用SQLiteAsyncConnection运行的东西。唯一缺少的是返回wait Task.run。否则就行了,谢谢。只是好奇,为什么您认为在我自己的代码上使用异步更好?通常其他代码会在主线程上锁定某些东西或执行某些东西。当我知道外部代码总是同步的,这使得测试变得容易时,我发现更容易找到这些bug。也许这是个糟糕的设计,但我就是这么做的,它帮助了我:
await CheckLogin ("username", "password");
public static Task<bool> CheckLogin(string userName, string password)
{
return await Task.Run(delegate{
bool valid = false;
string dbPath = Path.Combine(documentsPath, "..", dbName);
using (var conn = new SQLite.SQLiteConnection(dbPath))
{
try {
var user = conn.Query<User>("select * from tblUsers where nLogin = ? and nPassword = ?", userName, password);
if (user.Count>0)
{
valid = true;
}
}
catch(Exception ex)
{
throw ex;
}
}
return valid;
});
}
bool loginValid = await CheckLogin(user,pass);