我在 WCF 服务中有一个异步方法,以及一个使用此方法的客户端。当我调用该方法时,客户端的 GUI 被阻塞,直到异步方法完成。我的代码如下:
服务
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 是一个虚拟方法,其中一个 for 从 i = 0 到 1000000000。
客户
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 运行时被阻塞。
如果我没记错的话,异步方法会将控制权返回给调用者以避免程序被阻塞,但在我的情况下这不会发生。我误解了什么吗?我以错误的方式使用异步方法?
谢谢。戴姆洛克。