在做PostAsync时为什么等待不起作用?

时间:2012-08-15 13:40:19

标签: asp.net-mvc asp.net-web-api

在WebApi项目中,我执行Post将一些文件转换为另一个文件:

var post = client.PostAsync(requestUri, content);
post.Wait();
var result = post.Result;

结果将包含转换后的文件,因此对我来说很重要的是当前的Thread要等待响应,然后再继续使用结果。

好吧,它似乎更进一步,当然,结果尚未准备好......我在这里做错了吗?

2 个答案:

答案 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旨在保证您的代码在原始任务完成或中止后运行。