异步任务未触发

Async Task not firing

我有一个在页面加载时调用的 async task 方法,它已成功进入该方法,但它 "freezes" 在我将在下面指出的一行上,但我不能找出原因。

 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");
     }
 }

这条线对我来说是"freezing":

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

这可能是我正在查看的非常基本的东西,我似乎找不到它...有什么建议吗?

你有两个任务。 "inner" 任务是 "find some results"。 "outer" 任务是 "get the query, find some results, enumerate the results"。

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

您执行加载。这将创建 "outer" 任务。然后它创建 "inner" 任务和 returns。为什么?因为你说 await —— 异步等待 —— 等待内部任务完成。因此,您必须立即将 return 控制权交给调用者,以便它可以继续工作。外部任务 returned 给调用者。

来电者是做什么的?它说 "stop everything until the outer task is done"。现在,告诉我,这应该如何发生?将要执行外部任务剩余部分的线程目前处于冻结状态,等待外部任务完成。你说 "thread, do some work asynchronously and do no work until it is done"。好吧,你的愿望将会实现;没有工作将完成,线程将等待直到工作完成,这将永远不会。

现在,即使内部任务奇迹般地完成了——也许它是另一个线程上的 运行——它仍然必须向你刚刚冻结的线程上的外部任务发出信号 "the inner task is complete, so you can finish your work now" .

how can I fire the async method in my Page Load method?

查看此页面:

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