質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Q&A

1回答

1509閲覧

C# await/async Task.Run()について

otaks

総合スコア223

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

0グッド

0クリップ

投稿2017/10/02 11:33

編集2017/10/02 12:09

ニコ生APIの最新仕様
↑のデスクトップアプリケーションを作成指定しています。
1ページ目と2ページ目の内容で、内部リスト(innerList)を
更新する部分です。

差分
↑の左のコードではUpdatelist完了前に続きの処理(45行目~)が走ってしまうのですが、右のコードでは走りません。なせでしょうか?

また、どのように書くのが正解でしょうか?
右のコードは現在意図するように動いています。
(Updatelistが完了した後に後続処理が動く)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

UpdatelistがTaskなので、Taskが投げっぱなしになっている。
async/await構文は、メソッドをタスク化するので、Taskの中のTaskで、awaitしていない。
前者の場合、Updatelistをasync/await構文で書かなければうまくいくはず。

やりたいことが、よくわからんけど、同時に実行したいのなら、Task.WaitAllを使う
http://blog.xin9le.net/entry/2011/08/18/145810

投稿2017/10/02 11:42

編集2017/10/02 11:48
kiichi54321

総合スコア1984

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otaks

2017/10/02 12:04

>前者の場合、Updatelistをasync/await構文で書かなければうまくいくはず。 Updatelist()の中で下記を使っているので付けざるを得ない状態です。 HttpClient#GetStreamAsync HtmlParser#ParseAsync >同時に実行したいのなら、Task.WaitAllを使う 2回呼んでいるUpdatelist()は順番に実行したいです。
kiichi54321

2017/10/02 12:12

だから、後者の書き方で正解なんでしょ? 前者の方で書きたいのなら、Taskの中で、awaitすればいいけど、それは冗長すぎるでしょ。 あと続けて実行したいなら、ContinueWithを使うのがベターだと言われています。 https://qiita.com/takutoy/items/d45aa736ced25a8158b3 これ読むといいよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問