2016-05-27 3 views
2

私はこれを理解しようと多くの時間を費やしましたが残念ながら役に立たないです。私はどんな助けにも感謝しています。ConfigureAwait(false)が使用されていても、HttpClientのPostAsyncメソッドブロックがブロックされます

awaitConfigureAwait(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私の意見では、それがデッドロックである

  • Silverlightを使用して1

    • :以下ハンドラが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

    ところで、あなたの素晴らしい記事のためにスティーブンに感謝します。彼らは多くを助ける。

    +0

    あなたはWPF、UWPウィンドウフォームを使用していますか? – Flaugzig

    +0

    "ブロック"は正確に何を意味しますか?それはデッドロックですか、それともちょうど一秒間停止しますか?また、これは.NETデスクトップでですか? –

    +0

    *私は "火と忘れ"には興味がありません。私は、データがさらなる実行を許可する前に送信されていることを確認する必要があります*:あなたのような私には聞こえます*** ***それはブロックしたいです。だから問題は何ですか?つまり、データが送信されるまで、アプリケーションを起動する必要はありません(これはあなたの方法のためです)。 – sstan

    答えて

    0

    C#での非同期プログラミングの私の理解から、ConfigureAwaitをライブラリで呼び出す必要があります。

    これを参照してくださいarticleスティーブン・クレアリーから。 thisもチェックしてください。

    関連する問題