4

在一个 WebApi 项目中,我做了一个 Post 来将一些文件转换为另一个文件:

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

结果将包含转换后的文件,因此对我来说,当前线程在进一步使用结果之前等待响应很重要。

好吧,似乎它走得更远了,当然,结果还没有准备好……我在这里做错了吗?

4

2 回答 2

8

如果要同步做,不用调用Wait(),直接返回Result,Result属性阻塞调用线程,直到任务完成。

var response = client.PostAsync(requestUri, content).Result;
response.EnsureSuccessStatusCode();

在这里,result的内容还没有准备好,需要继续获取内容:

var responseBody = response.Content.ReadAsStreamAsync().Result;
于 2012-08-15T15:49:54.847 回答
7

我已经看到 Cuong 推荐的方法会出现间歇性线程问题。相反,我建议您使用这种方法:

var response = client
      .PostAsync(requestUri, content)
      .ContinueWith( responseTask => {
           var result = responseTask.Result;
           // .... continue with your logic ...
       });

response.Wait();

ContinueWith 方法旨在保证您的代码将在原始任务完成或中止后运行。

于 2012-08-15T16:33:24.777 回答