Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin android Sqlite.net C如何将同步查询转换为异步任务_Android_Sqlite_Asynchronous_Xamarin_Async Await - Fatal编程技术网

Xamarin android Sqlite.net C如何将同步查询转换为异步任务

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

我已经为我的xamarin android应用程序找到了一种方法,可以检查sqlite db的登录凭据。我对异步任务相当陌生,想知道如何将下面的方法更改为异步方法

我知道通过wait和将调用方法更改为异步中继命令,可以很容易地更改对方法的调用,但是如何更改查询方法呢

    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);