私は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;
}
のためにIダミー方法であり、 callAsyncMethodを呼び出すボタンがあります。ボタンをクリックすると、slowMethodの実行中にGUIがブロッキングされます。
私が間違っていない場合、非同期メソッドはプログラムがブロックされないようにコントロールを呼び出し側に返しますが、私の場合はこれは発生しません。私は何かを誤解していますか?私は間違った方法で非同期メソッドを使用していますか?
ありがとうございました。 ダイムロク。
を作成する必要がありますか?つまり、.NET 4.0とタスクでは、この場合、Begin/Endメソッドが必要であることがわかります.SOF 4.5の利点は小さいと思われます。ありがとう。 –