ブログ

割とコンピュータよりの情報をお届けします。

2018年7月4日

System.Threading.Thread.Startは一度しか開始されない。

.NET FrameworkのSystem.Threading.Threadを使用していて使用方法を誤って,大きなバグを招いてしまった。

System.Threading.Threadの使い方を間違えてしまった。

例えば,以下のようなコードでは最初のthread.Start()では意図通りRun()の中身が実行されるが,2回目のStart()では実行されない。

一応ドキュメントには載っている。

例外が発生すると思うのだが,どういうコンテキストで実行したか,例外が出ないことがあって大きなバグになってしまった。
一回一回new Thread(Run)を呼んでおけばよい。

using System;
using System.Threading;

namespace TEST_THREAD
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread thread = new Thread(Run);

            thread.Start();
            Thread.Sleep(2000);

            thread.Start();
            Thread.Sleep(2000);
        }

        private static void Run()
        {
            Console.WriteLine("Started");
        }
    }
}

≫ 続きを読む

2018/07/04 コンピュータ   TakeMe