如何在ASP.NET MVC应用中异步查询ParseObject集合?
嘿,我看到你正在尝试用Parse平台的异步查询获取Message对象集合,先帮你理一理当前代码里的小问题,再给你调整后的可行方案:
首先,你的代码里有个关键问题:在OnGet方法里手动启动Task却没有等待它完成,这会导致页面请求结束后,异步查询可能还在后台跑,容易引发资源泄漏或者预期外的行为。而且Razor Pages本身就支持异步的页面处理方法,完全不用手动管理Task的启动~
先贴出你的原代码(方便对比):
public class IndexModel : PageModel { public void OnGet() { Task<int> task = HandleMessagesAsync(); task.Start(); } private async Task<int> HandleMessagesAsync() { var query = ParseObject.GetQuery("Message"); IEnumerable<ParseObject> results = await query.F... } }
下面是修正后的完整代码,我补全了Parse查询的关键步骤,同时调整了异步处理的正确姿势:
public class IndexModel : PageModel { // 新增属性,用来存查询结果,方便在Razor页面中使用 public IEnumerable<ParseObject> Messages { get; set; } // 把OnGet改成异步版本,Razor Pages支持这种写法 public async Task OnGetAsync() { // 直接await异步方法,不用手动启动Task await HandleMessagesAsync(); } private async Task<int> HandleMessagesAsync() { var query = ParseObject.GetQuery("Message"); // 补全FindAsync()方法,这是Parse获取查询结果的标准异步方法 Messages = await query.FindAsync(); // 可以返回结果数量或者其他你需要的数值 return Messages.Count(); } }
给你解释下调整的关键点:
- 用
async Task OnGetAsync()替代原来的同步OnGet,这样可以安全地等待异步查询完成,避免后台残留任务 - 去掉了
task.Start(),await关键字会自动处理异步任务的执行和等待 - 补全了Parse查询的
FindAsync(),这是获取对象集合的核心方法 - 新增了
Messages公共属性,把查询结果存进去后,你就能在对应的Razor页面里直接遍历展示这些数据啦
内容的提问来源于stack exchange,提问作者Martin Erlic
相关产品推荐
相关产品推荐

