C# - System.Threading - Task

クラウディア 
1. 概要
2. Task

1. 概要

 「System.Threading」で、スレッドを扱うクラスと言えば、「Thread」クラスで、それを使い慣れているのですが。  「Task」というものがあって、使う機会があり、苦労したのでメモを残します。  「Task」は、参考サイトによれば。
このクラスは Task 、値を返さない 1 つの操作を表し、通常は非同期的に実行されます。 Task オブジェクトは、.NET Framework 4 で最初に 導入されたタスク ベースの非同期パターン の中心的なコンポーネントの 1 つです。 オブジェクトによってTask実行される処理は通常、メイン アプリケーション スレッドではなくスレッド プール スレッドで非同期的に実行されるため、プロパティとIsFaultedプロパティをIsCanceledIsCompleted使用Statusして、タスクの状態を判断できます。 最も一般的には、ラムダ式を使用して、タスクが実行する作業を指定します。

値を返す操作の場合は、クラスを使用します Task<TResult> 。
 だそうです(わたしは、読んでもよく頭にはいりませんが)。  本ページは、下記のサイトを参考にさせていただきました。
Task クラス (System.Threading.Tasks) 」
「System.Threading.Tasks.Task クラス」
「方法: タスクとその子を取り消す - .NET」
「CancellationTokenSource クラス (System.Threading) 

2. Task

 「Task」は、例えば。

private void actualTask()
{
	・・・ 処理 ・・・
}
 のようなメソッドを用意しておいて。

Task task = Task.Run(() => { actualTask(); });
 で、起動することができます。  下記のソースを書いて。

#pragma warning disable CS8602

using System;
using System.Threading;

public class Program
{
    static public void Main ()
	{
		myClass myclass = new myClass();
		myclass.run();
	}
}

public class myClass
{
	public myClass() {}

	public void run()
	{
		Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name.PadRight(12) + " method start");

		Task task = Task.Run(() => { actualTask(); });
		task.Wait();

		Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name.PadRight(12) + " method end");
	}

	private void actualTask()
	{
		Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name.PadRight(12) + " method start");

		for(int i=0; i<5; i++)
		{
			Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name.PadRight(12) + " method " + i);
			Thread.Sleep(1000);
		}

		Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name.PadRight(12) + " method end");
	}
}
 実行すると、下記の結果が得られます。

Main         method start
actualTask   method start
actualTask   method 0
actualTask   method 1
actualTask   method 2
actualTask   method 3
actualTask   method 4
actualTask   method end
Main         method end
AbemaTV 無料体験