我一直在尝试使用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();
}
答案 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;
}