Xamarin/C#/SQlLite - 为什么我的 SUM 查询返回 'System.Threading.Task'?

Xamarin/C#/SQlLite - Why is my SUM query returning 'System.Threading.Task'?

问题: 我有一个页面将显示我针对 SQLite 进行的各种 SQL 查询的结果D B。第一个应该取一列的总和 return 它。我使用了各种资源来详细说明如何进行 SQL 查询并将它们 return 作为可用变量,但我显然没有成功。目前正在 returning 'System.Threading.Task' 作为字符串。很想知道我哪里出了问题。

我的数据库方法获取 DAYS 列的总和:

public Task<int> getLeaveDaysSum()
    {
        return _database.ExecuteScalarAsync<int>("SELECT SUM(DAYS) from [LeaveEntry]");
    }

我的 OnAppearing 方法将更新页面标签以显示上述方法的结果:

protected override void OnAppearing()
    {
        base.OnAppearing();

        LeaveTakenDays.Text = App.Database.getLeaveDaysSum().ToString();
    }

一如既往,如果我可以提供更多详细信息,请告诉我。感谢所有帮助。

您需要使用 await 关键字,因为这是一个异步方法(并且还使用后缀 Async 更改方法名称)

async修饰符指定该方法是异步的,当调用异步方法时,返回一个任务。当 await 运算符应用于任务时,当前方法立即退出。当任务完成时,执行将以相同的方法恢复,这就是您的代码中缺少的。

public async Task<int> getLeaveDaysSumAsync()
{
    var count = await _database.ExecuteScalarAsync<int>("SELECT SUM(DAYS) from 
[LeaveEntry]");

     return count;
}

protected async override void OnAppearing()
{
    base.OnAppearing();

    var count = await App.Database.getLeaveDaysSumAsync();
    LeaveTakenDays.Text = count.ToString();
}

更多关于 async/await 的信息可以在这里找到:https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/asynchronous-programming