0
我有一個WCF服務中的異步方法和使用此方法的客戶端。當我調用該方法時,客戶端的GUI將被阻止,直到異步方法結束。我的代碼如下:WCF異步模式開始/結束任務阻止客戶端的GUI
SERVICE
public IAsyncResult BeginAsyncMethod(CustomClass paramCustomClass, AsyncCallback callback, object state)
{
Task<bool> task = Task<bool>.Factory.StartNew(p => slowMethod(paramCustomClass, state);
return task.ContinueWith(res => callback(task));
}
public bool EndAsyncMethod(IAsyncResult paramResult)
{
return ((Task<bool>)paramResult).Result;
}
slowMethod是虛擬方法與用於從i = 0到1000000000.
CLIENT
private void callAsyncMethod()
{
Task<bool> task = Task<bool>.Factory.FromAsync(_proxy.Proxy.BeginAsyncMethod, _proxy.Proxy.EndAsyncMethod, CustomClass, null);
bool hasFinished= task.Result;
}
在客戶端,我有一個調用callAsyncMethod的按鈕,當我單擊該按鈕時,GUI在slowMethod運行時會變爲焦點。
如果我沒有錯,異步方法將控制權返回給調用者,以避免程序被阻塞,但在我的情況下,這不會發生。我誤解了一些東西嗎?我以錯誤的方式使用異步方法?
謝謝。 Daimroc。
如何能做到這一點,而不.NET 4.5?我的意思是,在.NET 4.0和任務中,因爲我看到在這種情況下,我需要開始/結束方法,大大提高.NET 4.5的優勢,它似乎很小。謝謝。 – 2012-05-10 11:03:53