1

我正在尝试应用 EAP 模式来调用 WCF 服务。相同的代码在 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;
4

0 回答 0