tug*_*erk 5 c# httpclient async-await c#-5.0 asp.net-web-api
新的ASP.NET Web API HttpClient给了我一些奇怪的结果.这是我的代码:
class Program {
static async void Main(string[] args) {
var address = "http://localhost:3895/api/urls";
Console.WriteLine(await getStringAsync(address));
Console.ReadLine();
}
public static async Task<string> getStringAsync(string uri) {
var httpClient = new HttpClient();
return await httpClient.GetStringAsync(uri);
}
}
Run Code Online (Sandbox Code Playgroud)
这永远不会回来,控制台突然出现并消失.当我更改下面的代码时,它的工作原理应该是:
static void Main(string[] args) {
var address = "http://localhost:3895/api/urls";
Console.WriteLine(getString(address));
Console.ReadLine();
}
public static string getString(string uri) {
var httpClient = new HttpClient();
return httpClient.GetStringAsync(uri).Result;
}
Run Code Online (Sandbox Code Playgroud)
关于什么是问题的任何想法?
小智 9
async在MainVS11/.NET 4.5编译器中不允许使用on ,因此我假设您正在使用Async CTP.如果使用.NET 4.5是一个选项,请进行切换.
除此之外,它不起作用的原因是因为async或者更一般地说,任务依赖于能够以某种方式发出信号以便执行剩余的代码.它可以使用,.Result因为代码同步运行,因此问题不适用.
没有对控制台应用程序的内置支持,因为它们通常不像WinForms那样使用消息循环,但是你可以看一下Microsoft Visual Studio Async CTP\Samples\(C# Testing) Unit Testing\AsyncTestUtilities,尤其是GeneralThreadAffineContext.cs获得一个在控制台应用程序中也能运行的基本示例.
| 归档时间: |
|
| 查看次数: |
11256 次 |
| 最近记录: |