使用HttpWebRequest的任何优势.用asyncnwaithhandle . waitone()开始请求



我在一个ASP中遇到了一些代码。. NET应用程序,我想知道是否有以下两个片段之间的任何实际差异。注意,我们正在尝试向第三方端点发送请求,然后在页面上呈现的内容中使用响应。

Dim asyncResult As IAsyncResult = request.BeginGetResponse(Nothing, Nothing)
asyncResult.AsyncWaitHandle.WaitOne()
Using webResponse As WebResponse = request.EndGetResponse(asyncResult)
    Using rd As StreamReader = New StreamReader(webResponse.GetResponseStream())
        'code here
    End Using
End Using

和这个同步版本:

Using webResponse As WebResponse = request.GetResponse()
    Using rd As StreamReader = New StreamReader(webResponse.GetResponseStream())
        'code here
    End Using
End Using

根据对另一个问题的回答,WaitOne阻塞了线程。如果是这样,这样做与仅仅使用上面的同步方法相比真的有什么优势吗?假设处理该页的线程在此方法完成之前无法处理其他请求,我是否正确?

这是一种常见的反模式。你得到了两个世界中最糟糕的东西。没有线程被解除阻塞,你增加了开销。

可能,负责人听说使用异步api使他们的应用程序更具可扩展性。如果是这样的话,为什么GetResponse不只是在Begin/End方法方面实现,并且总是可扩展的?

Async现在很流行,但它一直被滥用,即使正确使用,它也经常浪费服务器上的时间。看到这样的东西不要惊讶。

最新更新