TaskFactory.StartNew

TaskFactory.StartNewでタスクを実行する。

TaskFactory.StartNew メソッド (System.Threading.Tasks) | Microsoft Docs

たくさんオーバーライドメソッドがあるが、Actionだけのメソッドと同じ意味の引数を指定したメソッドで実行してみる。

C# 非同期、覚え書き。 - Qiita

ここを参考に、

// 名前空間の登録
using System;   // 共通データ型と基本クラス(System名前空間)
using System.Threading; // マルチスレッド(System.Threading名前空間)
using System.Threading.Tasks;   // タスク(System.Threading.Tasks名前空間)

// MainClassの定義
class MainClass
{

    // Mainメソッドの定義
    static void Main()
    {

        // タスクの実行
        TaskFactory tf = Task.Factory;  // TaskFactoryのtfにいったん納める.
        tf.StartNew(() => // tf.StartNewでタスクをセットして実行.
        {

            // "Task(1)"~"Task(5)"まで出力.
            for (var i = 1; i <= 5; i++) // iが1から5まで繰り返す.
            {

                // "Task"とiを出力.
                Console.WriteLine("Task(" + i + ")");   // "Task(i)"を出力.

                // 1秒休止.
                Thread.Sleep(1000); // Thread.Sleepで1秒休止.

            }

        }, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default); // 処理内容をラムダ式で書く.(このオーバーライドとActionだけのメソッドは同じ意味.)

        // tfのプロパティの一部を出力.
        Console.WriteLine(tf.CreationOptions.ToString());   // CreationOptionsを出力.
        Console.WriteLine(tf.ContinuationOptions.ToString());   // ContinuationOptionsを出力.
        Console.WriteLine(tf.CancellationToken.ToString()); // CancellationTokenを出力.
        Console.WriteLine(tf.Scheduler.ToString()); // Schedulerを出力.
        
        // "Main(1)"~"Main(5)"まで出力.
        for (var i = 1; i <= 5; i++) // iが1から5まで繰り返す.
        {

            // "Main"とiを出力.
            Console.WriteLine("Main(" + i + ")");   // "Main(i)"を出力.

            // 1秒休止.
            Thread.Sleep(1000); // Thread.Sleepで1秒休止.

        }

    }

}

Actionのラムダ式以外に、CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Defaultを指定しているが、結局は同じである。
ついでに、tf.CreationOptions、tf.ContinuationOptions、に加えて、tf.CancellationToken、tf.Schedulerも出力してみる。

あれ?Exception・・・。
あれ?Exception・・・。

あれ?Exception・・・。
どうもtf.Schedulerはnullの模様。

として、

None
None
System.Threading.CancellationToken
null
Main(1)
Task(1)
Main(2)
Task(2)
Main(3)
Task(3)
Main(4)
Task(4)
Main(5)
Task(5)
続行するには何かキーを押してください . . .

TaskScheduler.Defaultを指定しているのに、tf.Schedulerはnullなのか・・・。

Sample/dotnet/TaskFactory/StartNew/src/TaskFactory_ at master · bg1bgst333/Sample · GitHub