You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:33:34