【问题标题】:How to Make a Synchronous service Call using HttpWebRequest (or) HttpClient in C#/XAML Metro App?如何在 C#/XAML Metro App 中使用 HttpWebRequest(或)HttpClient 进行同步服务调用?
【发布时间】:2013-10-16 06:08:11
【问题描述】:

我正在开发一个 C#/Xaml Metro 应用程序,根据要求,我想要一个同步服务调用,而不是同步服务调用。

这是我用于异步操作的但我想进行同步服务调用

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://xxxxxxx");
    request.Method = "POST";
    request.Credentials = new NetworkCredential("xxx", "xxx");
     using (Stream requestStream = await request.GetRequestStreamAsync())
    {
    }

如何在 C#/XAML Metro App 中使用 HttpWebRequest 或 HttpClient 进行同步服务调用?

【问题讨论】:

  • 这是我要求的一部分,可以让我知道怎么做,或者让我知道如何等到异步调用完成(除了使用 await )?我想完全等待并且在异步调用完成之前不做任何操作。 ??
  • 你应该使用异步。这是一个更好的模型,意味着您的应用程序不太可能对用户感到“锁定”和无响应。添加用于“身份验证”的 UI 而不是同步

标签: windows-runtime microsoft-metro httpwebrequest dotnet-httpclient


【解决方案1】:

我使用这种方法是因为它允许在等待之前做其他工作:

        var t = request.GetRequestStreamAsync();
        //do other work here
        t.Wait();
        using (Stream requestStream = t.Result)
        {
        }

【讨论】:

    【解决方案2】:

    做较小的改变。代替await request.GetRequestStreamAsync(),使用request.GetRequestStreamAsync().Result

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://xxxxxxx");
    request.Method = "POST";
    request.Credentials = new NetworkCredential("xxx", "xxx");
    using (Stream requestStream = request.GetRequestStreamAsync().Result)
    {
    }
    

    更多信息:How would I run an async Task<T> method synchronously?

    【讨论】:

      【解决方案3】:

      我正在开发一个 C#/Xaml Metro 应用程序,根据要求,我想要一个同步服务调用,而不是同步服务调用。

      正确的解决办法是改变“要求”。 Metro 应用程序应该是异步,而不是同步。如果您开发具有同步 UI 的 Metro 应用程序(这很困难但可能),它很可能会被应用商店拒绝。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多