非同期パターンは、非同期を呼び出し、await
結果を取得した後にコントロールを生成するように見えます。これは非常に理にかなっています。
ただし、WebClient
クラスUploadStringAsync
メソッドは a を返さず、代わりに void を返すため、 edTask
できません。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 プロジェクト用です。