問題を見つけるために少し助けが必要です。私はASP.NETコアを使用しており、それについてはかなりよく知っていますが、.NETコアC#は、非同期要求を行おうとすると「クラッシュ」して終了するようです。
システムの外部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();
どんな助けもありがたいです、うまくいけば私は何かを見落としているだけではありません。
ありがとう!
あなたの提案した解決策はまったく良くありません。
別の方法として、次のアプローチを試してください。
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 void
の代わりにasync Task
を使用したことが原因でした(コメントから推測されます)。
async void
は、待ちきれない非同期メソッドです。つまり、あなたはそれを呼び出すだけでそれを忘れることを意味します。例外は発生せず、戻り値も取得されません。
async Task
は、何も返さない待機可能な非同期メソッドです。これは、void
同期メソッドの非同期対応物です。さらに、待機可能であるため、非同期コードで発生する可能性のある例外をキャッチすることもできます。