我正在使用 HttpClient 将数据发布到 .NET 4.0 项目中的远程服务。我不关心这个操作阻塞,所以我想我可以跳过 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 正在返回任务而不是直接返回结果这一事实,我的应用程序是否真的会自动利用异步,即使我认为我正在避免它?