C#_Task とは

Task は非同期処理のことではない。
名の通り「仕事、課題、作業の最小単位」。
非同期処理における Task はスレッドを意識する必要がない。

 

ex )

    var task = Task.Run(() =>
    {
        HogeA();
        HogeB();
    });

変数 task
HogeA を実行後 HogeB を実行する、
というタスクを作成してそれを開始したもの
を表わす。

 

Task.Run

タスクを生成し開始する」という意味。
※実際の処理別のだれかが裏で行う。

 

Task.Run の使い方

同期的な一連の処理を、一つのタスクとみなす。

非同期タスクを組み合わせ、合成して、一つのタスクを組み上げるのが
非同期メソッドだとしたら、
その中に同期処理もタスクの一つとして組み込みたい時に使う

もう一つ別の使い方は、
Task.Runの中に非同期ラムダ式を書くパターン。
これは、単純にその非同期メソッドを呼び出しているというもの。

これ以外の使い方をしているなら、それはTask.Runの濫用。
よく分からん。例が欲しい。

 

Task.Run 説明 ~ ドキュメントから ~

スレッドプール上で実行する指定された作業をキューに配置し
その作業を表わすTaskオブジェクトを返す

スレッド:
プログラムの処理の実行単位( のひとつ )
タスクやプロセスより細かい処理の実行単位が「スレッド」。
プロセスのサブスレッドとして動作し、
実行に必要なメモリ空間を複数のスレッドで共有。

 

マルチスレッド:
A という処理と B という処理を同時に行える。( 並行処理 )

 

スレッドプール:
スレッドの増加は ( スレッドを生成したり消したりして ) パフォーマンスへの
影響が非常に大きい。

故に、1 度作ったスレッドを可能な限り使いまわす仕組み
つまり、あらかじめスレッドを生成しておき、消さずに再利用する。
1 ) 一定数のスレッドを常に立てておく。
2 ) タスクを持たせておくためのキューを持つ。
3 ) 処理中のタスクが終わり次第、次のタスクをキューから取り出して実行する。

 

プロセス:
プログラム実行の為の固有のメモリ空間を持っていおり、
独立性の高い実行単位。
単体で実行可能なプログラムの単位
複数のプロセスが存在する時は、それぞれ独立したアドレス空間を持つ。

 

ファイバ:
スレッドをさらに軽量化したもの。

 

タスク:
曖昧。
1 ) プロセスと同じ意味。
2 ) スレッドのことを指す。
3 ) プロセスよりも大きな集合を指す。

 

 

こちらから。
https://qiita.com/acple@github/items/8f63aacb13de9954c5da
https://msdn.microsoft.com/ja-jp/library/hh195051(v=vs.110).aspx
http://wa3.i-3-i.info/word12453.html
http://hiroakiuno.hatenablog.com/entry/20070316/p1
https://okwave.jp/qa/q6586640.html

 

以上。続く。