2013-01-06 7 views
12

すべては今日まで停止していました...以下は最小のソースコードです(私はVS 2012 Update 1、.Net 4.5を使用しています)。私が実行すると、アプリケーションはclient.PostAsync()を呼び出すと終了し、Console.ReadLine()には到達しません。デバッガと同じ、例外、何もない、終了コード0HttpClient.PostAsyncは、終了コード0でアプリをノックアウトします

私はVS2012を再起動してマシンを再起動しようとしましたが、何も機能しません。

今日もすべて変更されています(ソフトウェアがインストールされていないなど、他のネットワークアプリケーションはまだ動作しています)。

アイデア?私は私の心を失っていると思う。

答えて

29

問題は、プログラムが通常、Main()メソッドが終了したときに終了することです。そして、あなたがawaitRun()と打つとすぐにあなたのMain()は完了します。それは、それがどのようにasyncの方法で動作するからですか。

static void Main() 
{ 
    RunAsync().Wait(); 
} 

private static async Task RunAsync() 
{ 
    … 
} 

さらにいくつかの注意事項:

  1. あなたはasync voidメソッドを使用しないでくださいあなたは何をすべき

    async Task方法にRun()を行い、その後、あなたのMain()方法でTaskを待つことです(これは非同期イベントハンドラの場合です)。

  2. awaitWait()をGUIアプリケーションまたはASP.NETで混在させると、デッドロックが発生するため危険です。しかし、asyncをコンソールアプリケーションで使用する場合は、適切なソリューションです。
+5

+1。 'Task.Wait'は' AggregateException'で例外をラップするので、 'Main'ではなく' RunAsync'でトップレベルの 'try' /' catch'を行うほうが簡単です。 –

関連する問題