Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# 4.0: ΠΏΠΎΠ»Π½ΠΎΠ΅ руководство». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 233

Автор Π“Π΅Ρ€Π±Π΅Ρ€Ρ‚ Π¨ΠΈΠ»Π΄Ρ‚

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 3

.....Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 4

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1, Count = 4

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3, Count = 4

.....Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 5

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3, Count = 5

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1, Count = 5

.....Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3, Count = 6

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1, Count = 6

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 6

....Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1, Count = 7

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 7

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3, Count = 7

.....Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3, Count = 8

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1, Count = 8

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 8

.....Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3, Count = 9

ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3 Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½.

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 9

ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2 Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½.

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1, Count = 9

ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1 Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½.

Основной ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½.


Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ всС Ρ‚Ρ€ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π°Ρ‡Π½ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ЦП. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ срСды выполнСния, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π½Π΅ΡˆΠ½ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Π²Π»ΠΈΡΡŽΡ‰ΠΈΡ… Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.


ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° окончания ΠΏΠΎΡ‚ΠΎΠΊΠ°

НСрСдко оказываСтся ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΊ. Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ для этой Ρ†Π΅Π»ΠΈ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π»ΠΎΡΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Count. Но вСдь это Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π»ΡƒΡ‡ΡˆΠ΅Π΅ ΠΈ Π½Π΅ совсСм ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΠ΅ для обобщСния Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ΠŸΡ€Π°Π²Π΄Π°, Π² классС Thread ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π΄Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… срСдства для опрСдСлСния ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° окончания ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π‘ этой Ρ†Π΅Π»ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго, ΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ доступноС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния свойство IsAlive, опрСдСляСмоС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.


public bool IsAlive { get; }


Бвойство IsAlive Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ссли ΠΏΠΎΡ‚ΠΎΠΊ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ΠΎ вызываСтся, ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ выполняСтся. Для "опробования" свойства IsAlive ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° вмСсто ΠΊΠΎΠ΄Π° Π² классС MoreThread ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.


// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свойство IsAlive для отслСТивания ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° окончания ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²,

class MoreThreads {

  static void Main() {

    Console.WriteLine("Основной ΠΏΠΎΡ‚ΠΎΠΊ Π½Π°Ρ‡Π°Ρ‚.");


    // Π‘ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ    Ρ‚Ρ€ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

    MyThread mt1 = new MyThread("ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1");

    MyThread mt2 = new MyThread("ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2");

    MyThread mt3 = new MyThread("ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3");

    do {

      Console.Write(".");

      Thread.Sleep(100);

    } while (mt1.Thrd.IsAlive &&

             mt2.Thrd.IsAlive &&

             mt3.Thrd.IsAlive);

    Console.WriteLine("Основной ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½.");

  }

}


ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этой вСрсии ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ получаСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€Π΅ΠΆΠ΄Π΅. ЕдинствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ свойство IsAlive для отслСТивания ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° окончания ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ отслСТивания ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° окончания состоит Π² Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Join(). НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π΅Π³ΠΎ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ°Ρ Ρ„ΠΎΡ€ΠΌΠ°.


public void Join()


ΠœΠ΅Ρ‚ΠΎΠ΄ Join() ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½, Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ. Π•Π³ΠΎ имя ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ оТидания Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ присоСдинится ΠΊ Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ. Если ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Π±Ρ‹Π» Π½Π°Ρ‡Π°Ρ‚, Ρ‚ΠΎ гСнСрируСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ThreadStateException. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Join() ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слСдуСт ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ Join() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ основной ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ послСдним.


// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Join().

using System;

using System.Threading;


class MyThread {

  public int Count;

  public Thread Thrd;


  public MyThread(string name) {

    Count = 0;

    Thrd = new Thread(this.Run);

    Thrd.Name = name;

    Thrd.Start();

  }


  // Π’ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° Π² ΠΏΠΎΡ‚ΠΎΠΊ,

  void Run() {

    Console.WriteLine(Thrd.Name + " Π½Π°Ρ‡Π°Ρ‚.");

    do {

      Thread.Sleep(500);

      Console.WriteLine ("Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ " + Thrd.Name +

              ", Count = " + Count);

      Count++;

    } while(Count < 10);

    Console.WriteLine(Thrd.Name + " Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½.");

  }

}


// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Join() для оТидания Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€,

// ΠΏΠΎΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡΡ,

class JoinThreads {

  static void Main() {

  Console.WriteLine("Основной ΠΏΠΎΡ‚ΠΎΠΊ Π½Π°Ρ‡Π°Ρ‚.");


   // Π‘ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

    MyThread mt1 = new MyThread("ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1");

    MyThread mt2 = new MyThread("ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2");

    MyThread mt3 = new MyThread("ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3");


    mt1.Thrd.Join();

    Console.WriteLine("ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1 присоСдинСн.");


    mt2.Thrd.Join();

    Console.WriteLine("ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2 присоСдинСн.");


    mt3.Thrd.Join();

    Console.WriteLine("ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3 присоСдинСн.");


    Console.WriteLine("Основной ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½.");

  }

}


НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² выполнСния этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Напомним, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ срСды выполнСния, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Π²Π»ΠΈΡΡŽΡ‰ΠΈΡ… Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.


Основной ΠΏΠΎΡ‚ΠΎΠΊ Π½Π°Ρ‡Π°Ρ‚.

ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1 Π½Π°Ρ‡Π°Ρ‚.

ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2 Π½Π°Ρ‡Π°Ρ‚.

ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3 Π½Π°Ρ‡Π°Ρ‚.

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1, Count = 0

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3, Count = 0

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 0

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3, Count = 1

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 1

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1, Count = 1

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1, Count = 2

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3, Count = 2

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 2

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 3

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3, Count = 3

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1, Count = 3

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3, Count = 4

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1, Count = 4

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 4

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3, Count = 5

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1, Count = 5

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 5

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 6

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1, Count = 6

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3, Count = 6

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 7

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1, Count = 7

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3, Count = 7

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 8

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1, Count = 8

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3, Count = 8

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2, Count = 9

ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2 Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½.

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1, Count = 9

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3, Count = 9

ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3 Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½.

ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1 Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½.

ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #1 присоСдинСн.

ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #2 присоСдинСн.

ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ #3 присоСдинСн.

Основной ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½.


Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΎΡΡŒ послС Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ряда Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Join().


ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎΡ‚ΠΎΠΊΡƒ

ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π² срСдС .NET Framework нСльзя Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΡƒ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ начинался, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΡΠ»ΡƒΠΆΠΈΠ²ΡˆΠ΅Π³ΠΎ Π² качСствС Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° Π² ΠΏΠΎΡ‚ΠΎΠΊ, Π½Π΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Если ΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ‚ΠΎ ΠΊ этой Ρ†Π΅Π»ΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΈΠ΄Ρ‚ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ путями, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Но этот нСдостаток Π±Ρ‹Π» впослСдствии устранСн, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. Для этого придСтся Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Start(), конструктора класса Thread, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, слуТащСго Π² качСствС Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° Π² ΠΏΠΎΡ‚ΠΎΠΊ.