异步任务未触发

时间:2016-01-04 23:27:50

标签: c# asynchronous parse-platform async-await wait

我有一个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();

这可能是一个非常基本的事情,我正在寻找,我似乎无法找到它...任何建议?

1 个答案:

答案 0 :(得分:5)

你有两个任务。 &#34;内部&#34;任务是&#34;找到一些结果&#34;。 &#34;外部&#34;任务是&#34;得到查询,找到一些结果,列举结果&#34;。

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

执行Load。这创造了&#34;外部&#34;任务。然后它创建&#34;内部&#34;任务和回报。为什么?因为你说await - 异步等待 - 内部任务完成。因此,您必须立即将控制权返回给调用者,以便它可以继续工作。外部任务将返回给调用者。

来电者做什么?它说&#34;停止一切,直到外部任务完成&#34;。现在,告诉我,这应该是怎么回事?将执行外部任务的剩余部分的线程目前处于冻结状态,等待外部任务完成。你说&#34;线程,做一些异步的工作并且在完成之前不做任何工作&#34;。那么,你的愿望将被授予;没有工作将完成,线程将等待工作完成,这将永远不会。

现在,即使通过一些奇迹,内部任务完成 - 也许它正在另一个线程上运行 - 它仍然必须发出外部任务信号&#34;内部任务已完成,因此您现在可以完成工作&# 34;在你刚刚冻结的线程上。

  

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

参见本页:

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