WCF サービスを呼び出すために EAP パターンを適用しようとしています。Windows コンソール アプリケーションでは同じコードがスムーズに実行されますが、Windows Phone アプリケーションの Task.Wait では無期限にハングアップします。
問題についてのアイデアは高く評価されます。
前もって感謝します
拡張メソッドとヘルパー関数は次のとおりです。
public static class ServiceExtensions
{
public static Task<string> DoGlobalizationResourcesInquiryAsyncTask(
this Service1Client serviceClient,
int request)
{
var tcs = new TaskCompletionSource<string>();
EventHandler<GetDataCompletedEventArgs> handler = null;
handler = (sender, e) => EAPHelpers.TransferCompletion(
tcs,
e,
() => e.Result,
() => serviceClient.GetDataCompleted -= handler);
serviceClient.GetDataCompleted += handler;
try
{
serviceClient.GetDataAsync(request, tcs);
}
catch
{
serviceClient.GetDataCompleted -= handler;
tcs.TrySetCanceled();
throw;
}
return tcs.Task;
}
}
public static class EAPHelpers
{
public static void TransferCompletion<T>(
TaskCompletionSource<T> tcs,
AsyncCompletedEventArgs e,
Func<T> getResult,
Action unregisterHandler)
{
if (e.UserState == tcs)
{
if (e.Cancelled) tcs.TrySetCanceled();
else if (e.Error != null) tcs.TrySetException(e.Error);
else tcs.TrySetResult(getResult());
if (unregisterHandler != null) unregisterHandler();
}
}
}
次のように拡張メソッドを呼び出します。
Service1Client client = new Service1Client();
var task = client.DoGlobalizationResourcesInquiryAsyncTask(3);
task.Wait();
var response = task.Result;