我在.NET 4.0项目中使用HttpClient将数据发送到远程服务。因为我不担心此操作阻塞,所以我想跳过ContinueWith或async/await并使用Result。在调试过程中,遇到了一个问题:远程服务器没有响应。当我逐步执行代码时,似乎我的代码在第三行就停止了运行……当前堆栈指针行不再高亮显示,并且没有进入下一行。它只是消失了。花了我一段时间才意识到,我应该等待请求超时。
var client = new HttpClient();
var task = client.PostAsync("http://someservice/", someContent);
var response = task.Result;
我的理解是,在Task上调用Result会使代码以同步方式执行,更像这样(我知道HttpClient中没有Post方法):
var client = new HttpClient();
var response = client.Post("http://someservice/", someContent);
我不确定这是一件坏事,我只是试图理解它。HttpClient返回任务而不是直接结果,这样做是否真的意味着当我认为我避免了异步时,我的应用程序自动利用了异步?