2012-07-24 128 views
0

我有一個WCF代理示例WinForms應用程序。我現在用的是FromAsync返回任務,並等待完成任務才返回結果:爲什麼Task.Factory.FromAsync阻塞UI線程?

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線程被阻塞在表單上的按鈕點擊此方法。爲什麼?

回答

6

因爲在致電task.Wait()時,您正在明確地等待任務完成。

+0

刪除task.Wait仍然會阻止UI線程 – 2012-07-24 21:06:17

+2

@JonasStawski我建議你在刪除'task.Wait'後發佈你正在使用的代碼。你發佈的代碼有一個明顯的缺陷;你正在使用的代碼顯然有一個不同的... – 2012-07-24 21:08:19

+0

我會發布我想要完成不同的問題 – 2012-07-24 21:40:56

2

因爲您致電task.Wait()。它在調用線程上同步等待任務完成。

+0

刪除task.Wait()仍會阻塞UI線程。 – 2012-07-24 21:06:48