异步任务未启动

本文关键字:启动 任务 异步 | 更新日期: 2023-09-27 18:29:06

我有一个async task方法,我在页面加载时调用它,它成功地进入了该方法,但它"冻结"在一行上,我将在下面指出,我不知道为什么。

 protected void Page_Load(object sender, EventArgs e)
 {
     ParseClient.Initialize("AppKey", ".NetKey");
     Load().Wait();
 }    
 public async Task Load()
 {
     ParseQuery<ParseObject> myQuery = ParseObject.GetQuery("myClass");
     IEnumerable<ParseObject> results = await myQuery.FindAsync();
     foreach (ParseObject result in results)
     {
         string firstName = result.Get<string>("name");
     }
 }

这条线路对我来说很"冷"

IEnumerable<ParseObject> results = await myQuery.FindAsync();

这可能是我正在查看的一个非常初级的东西,我似乎找不到…有什么建议吗?

异步任务未启动

您有两个任务。"内部"任务是"找到一些结果"。"外部"任务是"获取查询,查找一些结果,枚举结果"。

请注意,外部任务取决于内部任务的完成情况。

执行加载。这将创建"外部"任务。然后创建"内部"任务并返回。为什么?因为您对await(异步等待)说要完成内部任务。因此,您必须立即将控制权返回给调用者,以便它能够继续工作。外部任务返回给调用方。

打电话的人是做什么的?上面写着"停止一切,直到外部任务完成"。现在,告诉我,这是怎么发生的?要执行外部任务剩余部分的线程目前处于冻结状态,等待外部任务完成。你说"线程,异步地做一些工作,在完成之前不做任何工作"。好吧,你的愿望会实现的;不会完成任何工作,线程将等待工作完成,这将永远不会。

现在,即使内部任务奇迹般地完成了——也许它正在另一个线程上运行——它仍然必须在刚刚冻结的线程上向外部任务发出"内部任务完成了,所以你现在可以完成你的工作"的信号。

如何在页面加载方法中激发异步方法?

参见本页:

http://www.asp.net/web-forms/overview/performance-and-caching/using-asynchronous-methods-in-aspnet-45