HTTPWebRequest不尊重超时值

时间:2016-09-20 14:58:31

标签: c# timeout httpwebrequest

现在我有一些代码正在发出如下所示的Web请求:

internal async static Task<string> MakeWebRequest(string uri)
{
    try
    {
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
        request.Timeout = TimeoutInMilliseconds;
        request.ReadWriteTimeout = TimeoutInMilliseconds;
        request.Method = "GET";

        var response = await request.GetResponseAsync().ConfigureAwait(false);

        return NonClosingStreamReader.StreamToString(response.GetResponseStream());
    }
    catch (WebException e)
    {
        if (e.Status == WebExceptionStatus.Timeout)
        {
            MyLogger("Timeout happened");
            return null;
        }

        throw;
    }
}

TimeOutInMilliSeconds设置为50,所以我认为任何在不到50毫秒内没有响应的内容都会超时。为了测试这个,我正在对一个执行以下操作的本地python flask应用程序进行调用:

from flask import Flask
import time
app = Flask(__name__)

@app.route("/")
def hello():
    time.sleep(5)
    return 'I waited 5 seconds!!'

if __name__ == "__main__":
    app.run()

我的C#代码没有超时,我看到“我等了5秒!!”响应(并且5秒等待是非常明显的所以我确定python代码正在做我想要的)。非常感谢任何帮助

编辑如果我MakeWebRequest进行同步通话并使用response.GetResponse(),我会看到预期的超时异常。在异步任务中执行此操作的正确方法是什么?

0 个答案:

没有答案