深夜のasync/await談義

C# の新しい機能である、async/awaitがよくわからんかったので、識者の方に教えてもらってました。
12
中村 薫 @kaorun55

@ufcpp おー、ありがとうざいます。読んでみますー

2012-03-15 01:49:09
中村 薫 @kaorun55

@ufcpp ちょうど今その辺りを調べようとしてました。どれがどのスレッドで動いてるのかわかれば、理解が早そうだったので。

2012-03-15 01:52:46
中村 薫 @kaorun55

@ufcpp ちなみに、async/awaitってC#の機能で、WinRTではないですよね?それがごっちゃになってて、WinRTでサンプル作ったので、スレッド周りがわからなくて困ってました^^; ふつうの.NETの環境でやってみます

2012-03-15 01:53:29
++C++; // 管理人: 岩永 @ufcpp

@kaorun55 https://t.co/KRPyEjjR 今のコードだと、こんな挙動です。たぶん全然意図通りじゃないと思われます。

2012-03-15 01:58:02
中村 薫 @kaorun55

@ufcpp あー、こんなにスレッドできるんですね… 自分の理解はこんなかんじだったので、だいぶ違いますf^_^;) http://t.co/rUKf2bRa

2012-03-15 02:02:23
拡大
++C++; // 管理人: 岩永 @ufcpp

@kaorun55 C# の機能です。WinRTはIAsyncOperationでしたっけ、で非同期処理の結果返してますが、それ用のAwaiterが用意されています。

2012-03-15 02:03:00
++C++; // 管理人: 岩永 @ufcpp

@kaorun55 基本、awaitするときに明示的にTaskのStartしちゃダメなんですよ。Result直呼びもブロックしちゃうのでダメ。

2012-03-15 02:04:08
++C++; // 管理人: 岩永 @ufcpp

@kaorun55 Delayの部分は実際にはスレッドリソース使うんじゃなくて、タイマー使ってます。

2012-03-15 02:04:40
中村 薫 @kaorun55

@ufcpp あぁ、それでClickまでasyncにして、全体的に非同期で動かすという話になるのでしょうか

2012-03-15 02:07:47
中村 薫 @kaorun55

なんか、基本的な部分が抜けてる気がするなぁ。自分の中で

2012-03-15 02:08:11
++C++; // 管理人: 岩永 @ufcpp

@kaorun55 あー、でも、意図を見ると、ContinueWithより後ろの挙動考えると1つは別タスク起動しないとダメですねぇ。えーっと、ちょっとコード書きます。

2012-03-15 02:09:04
中村 薫 @kaorun55

@ufcpp なんか、すいませんというか、ありがとうございますというか^^; 前述のとおり、コードにasyncの理解の意味以上はないので、その点あしからず...

2012-03-15 02:10:51
中村 薫 @kaorun55

でも、おかげでasync/awaitがわかりそうな気がする、、、

2012-03-15 02:11:47
++C++; // 管理人: 岩永 @ufcpp

@kaorun55 多分意図するコードはこうではないかと → http://t.co/CAqvjrP3 WPFで書いてるものの、おそらくコピペでMetroでも使えるかと。

2012-03-15 02:16:29
中村 薫 @kaorun55

@ufcpp おー!!ちょっと確認してみますw

2012-03-15 02:29:22
中村 薫 @kaorun55

@ufcpp あー、ステキです。バッチリです!

2012-03-15 02:43:56
中村 薫 @kaorun55

これって全部同じスレッドに見えるけど、違うのかな。MangedThreadIdでみてみた

2012-03-15 02:52:12
++C++; // 管理人: 岩永 @ufcpp

@kaorun55 今のコードだとたぶん全部UIスレッド上で実行されるのではないかと。awaitするまでは全部同期実行で、await後は同期コンテキスト経由でUIスレッドに戻ります。

2012-03-15 02:53:38
中村 薫 @kaorun55

@ufcpp あー、なるほど。非同期なのに、表は全部UIスレッドで動いてるってすごいですねぇ。みなさんこういう情報をどこからとってきてるんですか^^;

2012-03-15 02:55:27
++C++; // 管理人: 岩永 @ufcpp

@kaorun55 awaitがらみだと、//build/の資料と、MSDNブログですかねぇ。あと、IL Spyで中身覗き。

2012-03-15 02:57:22
中村 薫 @kaorun55

@ufcpp おぉ。。。 中身覗きw とにもかくにも、ありがとうございました。おかげさまで、だいぶ理解できました。

2012-03-15 02:58:15