我正在做一个 Nancy/ASP.Net 项目。我尝试使用 WebRequest 从其他 Web 服务获取数据,并在异步函数中实现了请求。我发现一个问题,当我尝试等待从函数返回的任务时,它会被无限期地阻塞。简化的代码看起来像这样..
using System.Net;
using System.Threading.Tasks;
using Nancy;
public class TestModule : NancyModule{
public TestModule() {
Get["/"] = p => "Hello, world";
Get["/async/"] = p => {
var req = WebRequest.CreateHttp("http://localhost:13254/");
// var responseTask = req.GetResponseAsync(); // this works!
var responseTask = getResponse(req); // this gets blocked!
var waitSuccess = responseTask.Wait(10000);
return waitSuccess ? "Yeah!" : "woooh!";
};
}
async Task<HttpWebResponse> getResponse(HttpWebRequest request) {
return (HttpWebResponse) await request.GetResponseAsync();
}
}
该代码使用 NancyFx,但它也发生在 vanilla ASP.Net 页面上。localhost:13254 上的服务运行良好。如果我使用从请求的 GetResponseAsync() 直接返回的任务,代码可以正常工作,但如果我将它包装在异步方法中,它就会被阻塞。
有谁知道代码有什么问题?:(我可以更改为使用同步版本,但异步功能可以在其他自托管服务中找到......所以如果可能的话,我也想在这里使用相同的代码......