为什么Task.Factory.FromAsync阻止UI线程?

时间:2012-07-24 21:03:04

标签: c# c#-4.0 task-parallel-library

我有一个带有WCF代理的WinForms应用程序示例。我正在使用FromAsync返回一个Task并在返回结果之前等待任务完成:

private bool Foo() {   
  var proxy = new MyProxy();   
  var request = new ProxyRequest();

  var task = Task<ReturnType>.Factory.FromAsync<ProxyRequest>(client.BeginCall, client.EndCall, request, null);   
  task.Wait();   
  return true; 
}

从按钮调用此方法时,单击窗体阻止UI线程。为什么呢?

2 个答案:

答案 0 :(得分:6)

因为您在调用task.Wait()时继续显式等待任务完成。

答案 1 :(得分:2)

因为您正在呼叫task.Wait()。它在调用线程上同步等待任务完成。