4

WebApiプロジェクトでは、あるファイルを別のファイルに変換するために投稿を行います。

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();

ここでは、結果のコンテンツはまだ準備ができていません。コンテンツを取得し続ける必要があります。

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 に答える