C#でマルチスレッド処理を行う方法

プログラムを作成していると、複数の処理を並行して行いたいと思う場面があるはずです。その際に利用できるのが「Task」です。Taskを使ってプログラムをマルチスレッド化することで、並行処理が楽々とできてしまいます。ここでは、C#のTaskについてサンプルコードも交えながら分かりやすく紹介していきます。
- PG
- ちなみに、マルチスレッドと対になるのはシングルスレッドですね!
- PL
- 「1つの流れで完結する」シングルスレッドと、「 同時に複数の処理を実行する」マルチスレッドという形で覚えましょう。
C#のマルチスレッドについて
では、C#でマルチスレッド処理を行いたい場合はどうすれば良いのでしょうか。
ここでTaskを使用します。Taskは.NET Framework 4で導入されたクラスですが、これを用いることで非同期処理や並行処理が簡単に記述できるようになっているのです。
※Taskを使ったマルチスレッド処理は次項でご説明します。
マルチスレッドを使う目的
ここまで読んで、どの場合でマルチスレッドを使うのか疑問に思っている方もいるかと思うので、ここで補足しておきます。
マルチスレッドを使う目的は、「パフォーマンスの向上」です。
最も分かりやすい例は、レスポンス・タイム(処理のリクエストを送信してから反応が届くまでの時間)です。
例えば、日頃利用しているGoogleなどの検索エンジンで「C# task」と検索したのに、なかなか検索結果が表示されなかったらストレスが溜まります。これが毎度であれば、「もうGoogle使うの辞めようかな……」と思ってしまうのではないでしょうか。
つまり、ユーザーに長く使ってもらうサービスにするためには、レスポンス・タイムを含めた全体のパフォーマンスを向上させる必要があるのです。そして、それを実現できるのがマルチスレッドです。
マルチスレッドが使いたくなってきたところで、さっそくサンプルコードを見ていきましょう。
Taskクラスを使ってC#でマルチスレッド処理を書いてみよう
サンプルコードは以下のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System; using System.Threading; using System.Threading.Tasks; public class TaskSample { public static void Main() { DispThreadInfo("[アプリケーション"); // 並行処理 var t = Task.Run(() => DispThreadInfo("[タスク")); t.Wait(); } static void DispThreadInfo(String str) { // 現在のマネージドスレッドの識別子を表示 Console.WriteLine("{0}スレッドID] => {1}", str, Thread.CurrentThread.ManagedThreadId); } } |
実行結果
- PG
- 並行処理と聞くと複雑なイメージがありますが、コードを見ると何となく書けそうな気がしてきました!
- PL
- ただし、使いこなすのは案外難しいので、きちんと理解した上で利用してください。
Taskでパフォーマンスの高いプログラムを作成
今回は、Taskクラスを使った並行処理についてご紹介していきました。並行処理が楽々と行えるようになれば、パフォーマンスの高いプログラムを作成することが可能になります。ぜひTaskを使いこなして、幅広い処理を書けるエンジニアを目指してください。