rag*_*che 5 c# asp.net-mvc dotnet-httpclient
当我在控制台应用程序中调用下面的函数时,它只是工作.但是当我将它添加到MVC控制器时,执行永远不会到达JsonConvert行.任何想法,我错过了什么.
调用代码
GetVersion(url).Result.FileVersion
Run Code Online (Sandbox Code Playgroud)
方法
public static async Task<Version> GetVersion(string url, string hostHeader)
{
var client = new HttpClient();
if (!string.IsNullOrEmpty(hostHeader))
{
client.DefaultRequestHeaders.Host = hostHeader;
}
var version = await client.GetStringAsync(url);
var output = JsonConvert.DeserializeObject<Version>(version);
client.Dispose();
return output;
}
Run Code Online (Sandbox Code Playgroud)
正如我在博客上解释的那样,你正在造成僵局.默认情况下,await捕获"上下文"(在本例中为ASP.NET请求上下文)并使用它来恢复该async方法.ASP.NET请求上下文一次只允许一个线程,并且您通过调用阻止该线程Result,从而阻止该async方法完成.
您的控制台应用程序没有死锁,因为它没有"上下文",因此async方法在线程池上恢复.
解决方案是更改要使用的调用代码:
(await GetVersion(url)).FileVersion
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5257 次 |
| 最近记录: |