ホームページ  >  記事  >  バックエンド開発  >  C# のフォアグラウンド スレッドとバックグラウンド スレッドを区別する方法

C# のフォアグラウンド スレッドとバックグラウンド スレッドを区別する方法

coldplay.xixi
coldplay.xixi転載
2020-07-09 17:41:043469ブラウズ

C# のフォアグラウンド スレッドとバックグラウンド スレッドを区別する方法

Net の共通言語ランタイム (CLR) は、フォアグラウンド スレッドとバックグラウンド スレッドという 2 つの異なるタイプのスレッドを区別できます。 2 つの違いは、アプリケーションは終了する前にすべてのフォアグラウンド スレッドを実行する必要があるのに対し、バックグラウンド スレッドの場合は、実行が終了したかどうかを考慮せずにアプリケーションを直接終了できることです。アプリケーションが終了すると、すべてのバックグラウンド スレッドも終了します。自動的に終了します。

あなたは違いがわからないかもしれません:

<strong>フォアグラウンド スレッド</strong>バックグラウンド スレッドの違い:

1. バックグラウンド スレッドはプロセスの終了を妨げません。プロセスは、それに属するすべてのフォアグラウンド スレッドが終了すると終了します。残りのバックグラウンド スレッドはすべて停止し、完了しません。

2. Thread.IsBackground プロパティを設定することで、いつでもフォアグラウンド スレッドをバックグラウンド スレッドに変更できます。

3. フォアグラウンド スレッドでもバックグラウンド スレッドでも、スレッド内で例外が発生するとプロセスが終了します。

4. マネージド スレッド プール内のスレッドはすべてバックグラウンド スレッドであり、新しい Thread メソッドを使用して作成されたスレッドは、デフォルトではすべてフォアグラウンド スレッドです。

.net 環境 Thread を使用して作成されたスレッドは、デフォルトではフォアグラウンド スレッドです。つまり、スレッド属性 IsBackground=false です。プロセス中、1 つのフォアグラウンド スレッドが終了していない限り、場合、プロセスは終了しません。メインスレッドはフォアグラウンドスレッドです。バックグラウンドスレッドは、スレッドが終了するかどうかに関係なく、すべてのフォアグラウンドスレッドが終了(正常終了、異常終了を含む)している限り、プロセスは自動的に終了します。一般に、バックグラウンド スレッドは短期タスクの処理に使用されます。たとえば、Web サーバーでは、クライアントから送信されたリクエスト情報の処理にバックグラウンド スレッドを使用できます。フォアグラウンド スレッドは通常、Web サーバーでクライアント要求を監視するプログラムや、特定のシステム リソースを定期的にスキャンするプログラムなど、長時間待機する必要があるタスクを処理するために使用されます。

ケース

static void Main(string[] args)
    {
      SampleTread thead = new SampleTread(10);

      SampleTread theadback = new SampleTread(10);
      var theadone = new Thread(thead.CountNumbers);
      var theadtwo = new Thread(theadback.CountNumbers);
      theadtwo.IsBackground = true;
      theadone.Start();
      theadtwo.Start();
      
    }
class SampleTread
  {
    private readonly int _iterations;
    public SampleTread(int iterations)
    {
      this._iterations = iterations;
    }
    public void CountNumbers()
    {
      for (int i = 0; i < _iterations; i++)
      {
        Sleep(TimeSpan.FromSeconds(0.5));
        Console.WriteLine($"{ CurrentThread.Name}print{i}");
      }
    }
  }

分析

実行結果は、現在のフォアグラウンド スレッドの実行が完了した後、バックグラウンド スレッドがも出る。実際、オペレーティング システムにはフロント スレッドとリア スレッドの概念がありません。なぜそのようなものがあるのでしょうか? ######ポイントは何ですか?これは元々そうなのですが、メインスレッドが終了すると、スレッドオブジェクトが解放されるため、他のスレッドも終了するはずです。メインスレッドが終了するときに他のスレッドが解放されないと、他のスレッドへの害が非常に大きくなります。 C# は、スレッドの操作を容易にするためにフォアグラウンド スレッドとバックグラウンド スレッドの概念を提供します。

使用方法についてはプロジェクトによって異なりますが、バックグラウンド スレッドは補助的な役割を果たすことがよくあります。たとえば、WinForm では、ウィンドウを閉じた後もスレッド プロセスが閉じられません。これは、クローズを閉じた後にメイン スレッドがシャットダウンされるためです。メイン スレッドは、他のスレッドが閉じられた後に安全に閉じられます。

これが、他のスレッドがまだ表示される理由です。もちろん、複数のプロセスが存在し、他のプロセスのメイン スレッドが閉じられていないことが、他のスレッドが表示される理由である可能性があります。これには、詳細な分析が必要です。

関連する学習に関する推奨事項:
C ビデオ チュートリアル

以上がC# のフォアグラウンド スレッドとバックグラウンド スレッドを区別する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。