C#の非同期処理について質問したいことがあります。
下のコードを動かしたところHttpClientの結果ではなく「お先に失礼」が表示されます。
.Resultを使えば処理を待つとゆう記事を見たのですがメインスレッドではない別のスレッドで処理が待たれるためメインスレッドはConsole.WriteLine("お先に失礼");を処理するとゆう解釈であっていますか?
C#のasync awaitの記事を読み漁っても理解できなかったので質問しました。
static void Main(string[] args) { Task<string> response=get("https://www.google.co.jp/"); Console.WriteLine("お先に失礼"); Console.ReadKey(); } static public async Task<string> get(string url) { using (var client = new HttpClient()) { var response = await client.GetAsync(@url); Console.WriteLine(response.RequestMessage); Console.WriteLine(""); response.EnsureSuccessStatusCode(); Console.WriteLine(response); Console.WriteLine(""); Console.WriteLine(response.Content.ReadAsStringAsync().Result); Console.WriteLine(""); return response.Content.ReadAsStringAsync().Result; } }
またここで「お先に失礼」が先に失礼しないようにする対策としてこちらのコードを書きました。
デッドロックなどが不安なのでこのコードが問題ないかご教示いただけますと幸いです。
Task<string> response=get("https://www.google.co.jp/"); var res= response.Result; Console.WriteLine("お先に失礼"); Console.ReadKey(); } static public async Task<string> get(string url) { using (var client = new HttpClient()) { var response = await client.GetAsync(@url).ConfigureAwait(false); Console.WriteLine(response.RequestMessage); Console.WriteLine(""); response.EnsureSuccessStatusCode(); Console.WriteLine(response); Console.WriteLine(""); Console.WriteLine(response.Content.ReadAsStringAsync().Result); Console.WriteLine(""); return response.Content.ReadAsStringAsync().Result; } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/10/30 03:22
2018/10/30 04:00
退会済みユーザー
2018/10/30 15:21