async/awaitとかTaskとか

  • Task.Factory.StartNew()はobsoleteでTask.Run()。
  • current thredを止めて待つのがWailtXXX、そういうTaskを返すのがWhenXXX。
  • asyncをつけたメソッドの中でawaitが使える。
  • asyncをつけたメソッドは戻り値を自動的にXからTaskに変換して返す。
  • awaitをつなげることでシーケンシャルな処理ができる。
  • 逆にパラレルに実行したい場合は、awaitで待たずに進める。

gist8085926

実行結果

* Run Sequential *
* id=421107885 start: 0 *
* id=421107885 a: 10 *
- Run Pararell -
- id=301241367 start: 0 -
- id=301241367 a: 10 -
- id=880988194 start: 0 -
- id=880988194 a: 10 -
$ Run Sequential NoAwait $
$ id=924151092 start: 0 $
$ id=924151092 a: 10 $
* id=421107885 b: 20 *
* id=551977066 start: 0 *
* id=551977066 a: 10 *
* id=551977066 b: 20 *
* sum: 60 *
- id=301241367 b: 20 -
- id=880988194 b: 20 -
- sum: 60 -
$ id=924151092 b: 20 $
$ id=277322821 start: 0 $
$ id=277322821 a: 10 $
$ id=277322821 b: 20 $
$ sum: 60 $