c# 非同期

c#での非同期処理について調べているが、なんというか、カオス。
c# というか .net では、様々な非同期処理があって、ただでさえ複雑な非同期処理の習得を、余計に難しくしていると感じる。
バージョンがあがる毎に、おそらくは、より便利な使い方を追求して、違う方法で非同期を処理する方法が考案・実装されていって、しかもそれがずっと残ったまま次の方法が追加されていくので、結局使う方がどれを選択したらいいのかわからなくなってしまうという感じ。

最新は async/await という方法だが、これはその前に考案されたTaskクラスをラップ・発展させたような感じらしく、結局Taskの振る舞いとそのラップ構造を理解していないと使えないっぽい。というのが、これまでの感想。まださわりしか理解していないので、間違っているかもしれないが…

また、例にラムダ式が使われているのがなぜか多く、c#をあまり使っていない初心者としては、まずそこから理解できない。
デリゲートも、関数ポインタと言われると、まぁわからんでもないけど、これほど多用される理由がよくわからない。普通に関数で処理できる部分まで無理にデリゲートにせんでもええと思うけどなぁ。どうしてもデリゲートでないとならないなどと言う部分がそんなに多いとも思えない。ラムダ式も同様。
ポインタの悪の部分をなくすために存在しているはずなのに、デリゲートを理解するのにポインタの知識が必要などと言うところが、もはや悪いループに入り込んでいるように思えてならない。概念をよくわからずに使用するプログラマが多いのかと思うと、なんだか悲しい気持ちになる。こういうのをもてはやして”成果だ”として多用するのは、マイクロソフトの悪い癖だと思う。
「何でもできる は 何もできない と同じ」などという格言もある。無名関数ではダメなの?LINQから発展・拡張したという経緯を差し引いても(いや、そう思っているだけで違うかもしれないけれど)、C#の構文にいきなり毛色の違いすぎるラムダ式が登場する違和感について、誰も何も言わなかったのだろうか?本当にこれが登場したおかげで便利になったの??簡単な説明だけで、いきなり

 Func < int ,bool > method = (year) =>
  year < 1994 ? year % 4 == 0 : year % 4 == 2;

なんて式を例に出されても、理解できないってーの。
うるう年を解くコードなのは理解できてますよ、念のため言っておくけど。
ていうか、このコード間違ってない?
100で割れる年と400で割れる年の処理抜けてるよね??
まぁそれは、ここではどうでもいい。

コード量は少なくなったかもだけど、本当に便利になったとは思えないなぁ。特に他言語から来た場合、非常にとまどうと思う。
WPFがイマイチ普及しないのと同じ事を、ここでもやってしまっていると思うのは私だけだろうか?

やっぱり愚痴になってしまった。
勉強して、理解して、結局使うのはちょっとだけ…無駄な時間ばかり掛かって、実際のコードを組む時間に悪い影響が出るこのループ。
理解してまえば早いのかもしれないが、一度使ってまた次にc#を使う事がそんなに多いとも思えない。私の場合。

いい加減、21世紀に入ってもう長いのだから、概念も方式も実装も、もっとシンプルにして欲しいものだと、切に願う。