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を使いこなして、幅広い処理を書けるエンジニアを目指してください。
Search キーワード検索
Popular 人気の記事
-
【VB.NET入門】DataGridViewの使い方まとめ
公開: 更新:
reccomended おすすめ記事
-
【.NETが統合】.NET 5の概要と今後のリリース予定
公開: 更新:
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)