在一个 WebApi 项目中,我做了一个 Post 来将一些文件转换为另一个文件:
var post = client.PostAsync(requestUri, content);
post.Wait();
var result = post.Result;
结果将包含转换后的文件,因此对我来说,当前线程在进一步使用结果之前等待响应很重要。
好吧,似乎它走得更远了,当然,结果还没有准备好……我在这里做错了吗?
在一个 WebApi 项目中,我做了一个 Post 来将一些文件转换为另一个文件:
var post = client.PostAsync(requestUri, content);
post.Wait();
var result = post.Result;
结果将包含转换后的文件,因此对我来说,当前线程在进一步使用结果之前等待响应很重要。
好吧,似乎它走得更远了,当然,结果还没有准备好……我在这里做错了吗?
如果要同步做,不用调用Wait()
,直接返回Result,Result
属性阻塞调用线程,直到任务完成。
var response = client.PostAsync(requestUri, content).Result;
response.EnsureSuccessStatusCode();
在这里,result的内容还没有准备好,需要继续获取内容:
var responseBody = response.Content.ReadAsStreamAsync().Result;
我已经看到 Cuong 推荐的方法会出现间歇性线程问题。相反,我建议您使用这种方法:
var response = client
.PostAsync(requestUri, content)
.ContinueWith( responseTask => {
var result = responseTask.Result;
// .... continue with your logic ...
});
response.Wait();
ContinueWith 方法旨在保证您的代码将在原始任务完成或中止后运行。