HttpWebRequest.BeginGetResponse不起作用。测试卡住了

时间:2014-10-30 11:22:57

标签: c# testing windows-phone-8

我一直在尝试使用HttpWebRequest.BeginGetResponse,但在调用CountdownEvent.Wait()后它会被卡住。使用HttpClient我没有遇到问题

    private static CountdownEvent latch;

    [TestMethod]
    public void Test001()
    {
        latch = new CountdownEvent(1);

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.google.com");
        request.BeginGetResponse(new AsyncCallback(Finish), request);

        latch.Wait();
    }

    private void Finish(IAsyncResult result)
    {
        Debug.WriteLine("FINISH");
        latch.Signal();
    }

2 个答案:

答案 0 :(得分:0)

问题很可能来自HttpWebRequest.BeginGetResponse(...)在某个时刻(非同步)需要UI线程的事实。我不知道为什么会这样,但事实就是如此。

在您的情况下,方法Test001()很可能在UI线程中调用。在latch.Wait();行,它会阻止该主题,因此请求实际上无法完成,并且永远不会完成。

如果您可以在非UI线程上调用Test001()方法,它应该可以工作。不能帮助你,因为我真的不知道单元测试框架是如何工作的。

答案 1 :(得分:0)

你能试试这个......

[TestMethod]
public async Task Test001()
{
    latch = new CountdownEvent(1);

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.google.com");
    request.BeginGetResponse(new AsyncCallback(Finish), request);

   await latch;
}