6章非同期プログラミング
かつてはコードを作成するとすれば同期処理を行うものばかりでした。並列処理やスレッドプール、平行プログラミングは特化した熟練プログラマ向けのもので、それであってもミスもよく起こっていました。老舗のインターネットフォーラムであるUseNetや様々な書籍においても、マルチスレッドプログラミングはやるべきことがきちんとわかっていて、そうせざるを得ないという場合を除けば、なるべく避けるようにという忠告も多くありました。しかし今は違います。
2010年、Microsoftからタスク並列ライブラリ(TPL:Task Parallel Library)がリリースされると、マルチスレッドのコードを非常に簡単に作成できるようになりました。これはマルチスレッド/マルチコア対応のCPUが手軽に手に入れられるようになったことともうまくかみ合いました。TPLの重要なクラスとしてTask
クラスがあります。このクラスは何らかの作業を別のスレッド上で実行し、結果を返すという処理を表すものです。また、興味深いことに「レシピ4.10 並列にクエリを実行する」で説明しているPLINQも同時期にリリースされました。TPLはCPU使用率の高いマルチスレッド処理をプロセス内で行う場合に重要な機能だといえます。
TPLのTask
を基礎として、MicrosoftはC# 4で非同期用の特別な文法を言語に追加しました。非同期プログラミング自体はC# 1でもデリゲートを利用することで実装できましたが、非常に複雑な割にあまり効果も期待できないものでした。C# 5ではasync/await
キーワードが導入され、コード自体は同期処理用のものとほとんど変わりなく作成できるようになりました。コードの単純化だけではなく、 ...
Get C#クックブック ―プロフェッショナル開発者のためのモダンレシピ now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.