现在我有一些代码正在发出如下所示的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()
,我会看到预期的超时异常。在异步任务中执行此操作的正确方法是什么?