私はこれを理解しようと多くの時間を費やしましたが残念ながら役に立たないです。私はどんな助けにも感謝しています。ConfigureAwait(false)が使用されていても、HttpClientのPostAsyncメソッドブロックがブロックされます
await
とConfigureAwait(false)
を使用していますが、問題はPostAsync
コールブロックイベントです。
private async void OnApplicationLaunching(object sender, LaunchingEventArgs e)
{
using (var httpClient = new HttpClient())
{
var content = new List<KeyValuePair<string, string>>();
var urlEncodedContent = new FormUrlEncodedContent(content);
await httpClient.PostAsync("url address", urlEncodedContent).ConfigureAwait(false);
}
}
編集私はWindowsPhone 8.0私の意見では、それがデッドロックである
- :以下ハンドラがUIスレッドで呼ばれています。 "タスクがキャンセルされました"というメッセージが表示されるまで、実行はブロックされます
- 私は "火と忘れ"には興味がありません。さらなる実行を許可する前にデータが送信されていることを確認する必要があります。ここで編集2
は前のものからたくさん異ならない別のコードサンプルですが、beterはスティーブンさんのブログからのコードサンプルに似ている
節http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html
で「デッドロックの防止」セクション「回避コンテキスト」http://blog.stephencleary.com/2012/02/async-and-await.html
ところで、あなたの素晴らしい記事のためにスティーブンに感謝します。彼らは多くを助ける。
あなたはWPF、UWPウィンドウフォームを使用していますか? – Flaugzig
"ブロック"は正確に何を意味しますか?それはデッドロックですか、それともちょうど一秒間停止しますか?また、これは.NETデスクトップでですか? –
*私は "火と忘れ"には興味がありません。私は、データがさらなる実行を許可する前に送信されていることを確認する必要があります*:あなたのような私には聞こえます*** ***それはブロックしたいです。だから問題は何ですか?つまり、データが送信されるまで、アプリケーションを起動する必要はありません(これはあなたの方法のためです)。 – sstan