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 は、i = 0 から 1000000000 までの for を持つダミー メソッドです。
クライアント
private void callAsyncMethod()
{
Task<bool> task = Task<bool>.Factory.FromAsync(_proxy.Proxy.BeginAsyncMethod, _proxy.Proxy.EndAsyncMethod, CustomClass, null);
bool hasFinished= task.Result;
}
クライアントには、callAsyncMethod を呼び出すボタンがあり、ボタンをクリックすると、slowMethod の実行中に GUI がブロックされます。
私が間違っていなければ、非同期メソッドはプログラムがブロックされないように呼び出し元に制御を返しますが、私の場合はこれは発生しません。私は何かを誤解しましたか?非同期メソッドを間違った方法で使用していますか?
ありがとう。ダイムロック。