非同期パターンは非同期と呼ばれるように見えますが、結果はawait
の後に出力され、多くの意味があります。WebClient.UploadStringAsyncリクエストを '待つ'方法
WebClient
クラスUploadStringAsync
メソッドではTask
が返されず、代わりにvoidが返されるため、await
は編集できません。代わりに、イベントハンドラを定義することができます。例えば
public async Task FlushQueue() {
attempt = 0;
WebClient wc = new WebClient();
while ((queue.Count > 0) && (attempt < ALLOWED_ATTEMPTS)) {
// Copy 10 items from queue and put into buffer ...
...
wc.UploadStringCompleted += (s, e) => {
// if response 200
// Remove 10 sent items from queue
// else attempt++
};
wc.UploadStringAsync("http://example.com/blah", "POST", buffer);
// In an ideal world we could call UploadStringAsync like,
// var response = await wc.UploadStringAsync("http://example.com/blah", "POST", buffer);
}
}
しかし、これは応答を待つのではなく、代わりに最大数のWeb要求を迅速にラッキングします。
イベントハンドラのコールバックが実行されるまで、FlushQueue
の外側に戻ってフローを戻す方法はありますか?
編集:これはWindows Phone 7.5プロジェクト用です。
「UploadStringTaskAsyc」のドキュメントを見て、文字列として「サーバレスポンス」を返しますが、文字列の形式は何もわかりません - HTTPのrepsonseコードが必要です。 200、その文字列を解析する必要がありますか? – Brendan
また、HttpClientはこのようなことを行うための好ましい方法ですか?これは私が聞いた最初のものです... 'Windows PhoneからのPOSTデータ'を検索するとWebClient、HttpWebRequestなどが発生しますが、HttpClientは発生しません。 [このMSDNの記事](http://msdn.microsoft.com/en-us/library/ff637320(v=v2/95).aspx#未サポート)および[このMSDNの記事](http://msdn.microsoft。 com/ja-us/library/debx8sh9(v = 90).aspx)。現在受け入れられているベストプラクティスを見つけるための優れたリソースはありますか? – Brendan
私が知る限り、Windows Phone上の 'HttpClient'はNuGetパッケージとして利用可能ですが、まだベータ版です。だから私はそれを「優先する方法」と呼ぶのではなく、「優先する方法」と呼んでいます;)詳細については、http://blogs.msdn.com/b/bclteam/archive/2013/02/18/portable-httpclientを参照してください。 -for-net-framework-and-windows-phone.aspx –