다음을 통해 공유


Thread.CurrentThread 속성

정의

현재 실행 중인 스레드를 가져옵니다.

public:
 static property System::Threading::Thread ^ CurrentThread { System::Threading::Thread ^ get(); };
public static System.Threading.Thread CurrentThread { get; }
member this.CurrentThread : System.Threading.Thread
Public Shared ReadOnly Property CurrentThread As Thread

속성 값

Thread

현재 실행 중인 스레드를 나타내는 Thread입니다.

예제

다음 예에서는 20 개의 자식 작업을 만드는 작업을 만듭니다. 각 잘 작업으로 애플리케이션 자체에서 호출 합니다 ShowThreadInformation 메서드를 사용 하는 CurrentThread 가 실행 되는 스레드에 대 한 정보를 표시 하는 속성입니다.

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   private static Object lockObj = new Object();
   private static Object rndLock = new Object();

   public static void Main()
   {
      Random rnd = new Random();
      var tasks = new List<Task<Double>>();
      ShowThreadInformation("Application");

      Task<Double> t = Task.Run( () => { ShowThreadInformation("Main Task(Task #" + Task.CurrentId.ToString() + ")");
                                         for (int ctr = 1; ctr <= 20; ctr++)
                                           tasks.Add(Task.Factory.StartNew(
                                              () => { ShowThreadInformation("Task #" + Task.CurrentId.ToString());
                                                      long s = 0;
                                                      for (int n = 0; n <= 999999; n++) {
                                                         lock (rndLock) {
                                                            s += rnd.Next(1, 1000001);
                                                         }
                                                      }
                                                      return s/1000000.0;
                                                    } ));

                                        Task.WaitAll(tasks.ToArray());
                                        Double grandTotal = 0;
                                        Console.WriteLine("Means of each task: ");
                                        foreach (var child in tasks) {
                                           Console.WriteLine("   {0}", child.Result);
                                           grandTotal += child.Result;
                                        }
                                        Console.WriteLine();
                                        return grandTotal / 20;
                                   } );
      Console.WriteLine("Mean of Means: {0}", t.Result);
   }

  private static void ShowThreadInformation(String taskName)
  {
      String msg = null;
      Thread thread = Thread.CurrentThread;
      lock(lockObj) {
         msg = String.Format("{0} thread information\n", taskName) +
               String.Format("   Background: {0}\n", thread.IsBackground) +
               String.Format("   Thread Pool: {0}\n", thread.IsThreadPoolThread) +
               String.Format("   Thread ID: {0}\n", thread.ManagedThreadId);
      }
      Console.WriteLine(msg);
   }
}
// The example displays output like the following:
//       Application thread information
//          Background: False
//          Thread Pool: False
//          Thread ID: 1
//
//       Main Task(Task #1) thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 3
//
//       Task #2 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 4
//
//       Task #4 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 10
//
//       Task #3 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 9
//
//       Task #5 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 3
//
//       Task #7 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 5
//
//       Task #6 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 7
//
//       Task #8 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 6
//
//       Task #9 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 8
//
//       Task #10 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 9
//
//       Task #11 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 10
//
//       Task #12 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 6
//
//       Task #13 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 4
//
//       Task #14 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 3
//
//       Task #15 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 7
//
//       Task #16 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 5
//
//       Task #17 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 8
//
//       Task #18 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 9
//
//       Task #19 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 10
//
//       Task #20 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 4
//
//       Task #21 thread information
//          Background: True
//          Thread Pool: True
//          Thread ID: 7
//
//       Means of each task:
//          500038.740584
//          499810.422703
//          500217.558077
//          499868.534688
//          499295.505866
//          499893.475772
//          499601.454469
//          499828.532502
//          499606.183978
//          499700.276056
//          500415.894952
//          500005.874751
//          500042.237016
//          500092.764753
//          499998.798267
//          499623.054718
//          500018.784823
//          500286.865993
//          500052.68285
//          499764.363303
//
//       Mean of Means: 499908.10030605
Imports System.Collections.Generic
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Private lockObj As New Object()
   Private rndLock As New Object()
   
   Public Sub Main()
      Dim rnd As New Random()
      Dim tasks As New List(Of Task)
      ShowThreadInformation("Application")

      Dim t As Task(Of Double) = Task.Run( Function()
                                        ShowThreadInformation("Main Task(Task #" + Task.CurrentId.ToString() + ")")
                                        For ctr As Integer = 1 To 20
                                           tasks.Add(Task.Factory.StartNew( Function()
                                                                     ShowThreadInformation("Task #" + Task.CurrentId.ToString())
                                                                     Dim s As Long = 0
                                                                     For n As Integer = 0 To 999999
                                                                        SyncLock rndLock
                                                                           s += rnd.Next(1, 1000001)
                                                                        End SyncLock
                                                                     Next
                                                                     Return s/1000000
                                                                  End Function))
                                        Next

                                        Task.WaitAll(tasks.ToArray())
                                        Dim grandTotal As Double
                                        Console.WriteLine("Means of each task: ")
                                        For Each t In tasks
                                           Console.WriteLine("   {0}", t.Result)
                                           grandTotal += t.Result
                                        Next
                                        Console.WriteLine()
                                        Return grandTotal / 20
                                   End Function )
      Console.WriteLine("Mean of Means: {0}", t.Result)
   End Sub
   
   Private Sub ShowThreadInformation(taskName As String)
      Dim msg As String = Nothing
      Dim thread As Thread = Thread.CurrentThread
      SyncLock lockObj
         msg = String.Format("{0} thread information", taskName) + vbCrLf +
               String.Format("   Background: {0}", thread.IsBackground) + vbCrLf +
               String.Format("   Thread Pool: {0}", thread.IsThreadPoolThread) + vbCrLf +
               String.Format("   Thread ID: {0}", thread.ManagedThreadId) + vbCrLf
      End SyncLock
      Console.WriteLine(msg)
   End Sub
End Module
' The example displays output like the following:
'       Application thread information
'          Background: False
'          Thread Pool: False
'          Thread ID: 1
'
'       Main Task(Task #1) thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 3
'
'       Task #2 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 4
'
'       Task #4 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 10
'
'       Task #3 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 9
'
'       Task #5 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 3
'
'       Task #7 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 5
'
'       Task #6 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 7
'
'       Task #8 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 6
'
'       Task #9 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 8
'
'       Task #10 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 9
'
'       Task #11 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 10
'
'       Task #12 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 6
'
'       Task #13 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 4
'
'       Task #14 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 3
'
'       Task #15 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 7
'
'       Task #16 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 5
'
'       Task #17 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 8
'
'       Task #18 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 9
'
'       Task #19 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 10
'
'       Task #20 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 4
'
'       Task #21 thread information
'          Background: True
'          Thread Pool: True
'          Thread ID: 7
'
'       Means of each task:
'          500038.740584
'          499810.422703
'          500217.558077
'          499868.534688
'          499295.505866
'          499893.475772
'          499601.454469
'          499828.532502
'          499606.183978
'          499700.276056
'          500415.894952
'          500005.874751
'          500042.237016
'          500092.764753
'          499998.798267
'          499623.054718
'          500018.784823
'          500286.865993
'          500052.68285
'          499764.363303
'
'       Mean of Means: 499908.10030605/

각 자식 작업은 1에서 100만 사이의 100만 난수를 생성 하 고 평균을 반환 합니다. 부모 작업은 메서드를 호출 Task.WaitAll 하 여 각 작업에서 반환 되는 평균을 표시 하 고 평균을 계산 하기 전에 자식 작업이 완료 되었는지 확인 합니다.

애플리케이션이 포그라운드 스레드에서 실행 되는 동안 각 태스크가 실행 되도록 스레드 풀 스레드에서 note 합니다.

적용 대상