Xamarin/C# SQLite执行SUM查询返回System.Threading.Task问题求助
错误原因
你调用的getLeaveDaysSum()方法返回类型是Task<int>,这是.NET异步编程中代表异步操作的对象,而非你需要的求和结果。你没有等待异步操作执行完成就直接调用ToString(),输出的自然是Task类型的名称,而非实际的查询结果。
修复方案
推荐方案:使用await等待异步执行完成
将OnAppearing方法修改为异步方法即可,生命周期方法使用async void属于.NET中的合法用法:
protected override async void OnAppearing() { base.OnAppearing(); // 等待异步查询执行完成,拿到实际的int类型求和结果 int leaveDaysSum = await App.Database.getLeaveDaysSum(); LeaveTakenDays.Text = leaveDaysSum.ToString(); }
不推荐方案:同步等待结果
如果特殊场景不能修改为异步方法,可以用以下方式同步获取结果,但该方法有概率引发UI线程死锁,非必要不建议使用:
protected override void OnAppearing() { base.OnAppearing(); int leaveDaysSum = App.Database.getLeaveDaysSum().GetAwaiter().GetResult(); LeaveTakenDays.Text = leaveDaysSum.ToString(); }
内容的提问来源于stack exchange,提问作者aTubOfAdam
相关产品推荐
相关产品推荐

