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