2014-10-30 82 views
0

我一直在尝试使用HttpWebRequest.BeginGetResponse,但在CountdownEvent.Wait()被调用后它变得卡住了。使用HttpClient的我不是遇到的问题HttpWebRequest.BeginGetResponse不起作用。测试会卡住

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(); 
    } 
+0

这是'叫在UI线程Test001'方法?如果是这样,'latch.Wait();'行会阻止这个问题的UI线程。 – yasen 2014-10-30 11:24:21

+0

我不太确定。说实话,我对Windows Development +这个silverlight单元测试框架非常陌生 – 2014-10-30 11:31:08

回答

0

问题最有可能来自于HttpWebRequest.BeginGetResponse(...)需要UI线程在某一点(不同步)的事实。我不知道这是为什么,但它是如何。

就你而言,方法Test001()很可能在UI线程中调用。在latch.Wait();行上它阻塞了线程,所以请求实际上不能被创建,并且它永远不会完成。

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

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; 
}