2016-10-27 29 views
4

私の問題を見つけるには少し助けが必要です。私はASP.NETのコアを使用して、私はかなり精通していますが、.NETのコアC#は "クラッシュ"し、非同期要求を出そうとしているときに終了しているようです。.NETコアの非同期リクエスト

私は、これは、システムの外部IPを返すメソッド

private async Task<string> getExternalIP() 
    { 
     using (System.Net.Http.HttpClient HC = new System.Net.Http.HttpClient()) 
     { 
      return await HC.GetStringAsync("https://api.ipify.org/"); 
     } 

    } 

を動作するはずですが、それはHC.GetStringAsyncに到達したときにそれが終了します。私もブレークポイントを置こうとしましたが、実際には実行されません。

私はうまくいけば、私はちょうど何かを見下ろすていないよ、すべてのヘルプは感謝です

string Address = await getExternalIP(); 

を使用してメソッドを呼び出すようにしようとしています。

ありがとうございます!

+0

おそらく例外が発生しています。 – SLaks

+0

@SLaksすべての例外通知を再度有効にしました。例外はスローされません。 – Jaxi

+0

'async void'を使用していますか? – SLaks

答えて

7

あなたの提案された解決策はまったく良くありません。

  1. この方法を試してみてください、代わりにデッドロック

を引き起こす可能性があります

  • 同期です:

    private async Task<string> GetExternalIP() 
    { 
        using (HttpClient client = new HttpClient()) 
         return await client.GetStringAsync("https://api.ipify.org/"); 
    } 
    

    あなたの呼び出し方法があまりにも非同期にする必要があります。

    public async Task CallingMethod() 
    { 
        // ... 
        string address = await GetExternalIP(); 
        // ... 
    } 
    

    それは前にあなたのために働いていなかった理由は、async Taskの代わりにasync voidの使用によって引き起こされました(これはコメントによって推測されました)。

    async voidは、待機できない非同期メソッドです。つまり、あなたはそれを呼び出して忘れるだけです。あなたは例外をキャッチしません、あなたは戻り値を取得しません。

    async Taskは、何も返さない待機可能な非同期メソッドです。 void同期メソッドの非同期対応です。さらに、それは待たれているので、非同期コードで発生するかもしれない例外もキャッチすることができます。

  • +0

    私はもともとこれに似たものがありましたが、問題は "CallingMethod"が返されずに終了し、アプリケーションが終了します。例外もメッセージもありません。 – Jaxi

    +0

    @ProNinjaCatあなたが 'async void'を使用していて、' async Task'を使用していなかったからです。また誰でもCallingMethod()を呼び出す必要があります。 –

    +0

    私はawait getExternalIP()メソッドとgetExternalIP()メソッドを全く同じように実行している非同期タスクを持っていますが、まだ実行されません。 – Jaxi

    関連する問題