abort는 그냥 죽어라! (보장은 안함) 라는 느낌이라면
join은 죽어줄때 까지 기다려 줄께~! 인데
코드 예제를 보면 abort는 서비스로 구성된 while 루프를 죽이고 있고
join은 일회성 쓰레드를 죽이는 예제로 설명되어 있는걸 보면..
맘편하게 abort로 죽어! 해야하려나?
[링크 : https://docs.microsoft.com/ko-kr/dotnet/standard/threading/destroying-threads]
쓰레드 보다는 간접적인 방법을 쓰라고 권장 -_ㅠ
[링크 : https://docs.microsoft.com/ko-kr/dotnet/standard/threading/threads-and-threading]
[링크 : https://docs.microsoft.com/ko-kr/dotnet/standard/threading/using-threads-and-threading]
obsolete를 사용되지 않는으로 해석해버렸군.
아무튼 abort는 .net 5.0 이후에서는 컴파일 경고가 뜬다고 하니
반강제적으로 TPL이나 PLINQ로 가게 만들려는 정책인듯?
이 메서드는 사용되지 않습니다. .NET 5.0 이상 버전에서이 메서드를 호출 하면 컴파일 타임 경고가 생성 됩니다. 이 메서드는 PlatformNotSupportedException 런타임에 .net 5.0 이상 및 .Net Core에서을 throw 합니다. |
[링크 : https://docs.microsoft.com/ko-kr/dotnet/api/system.threading.thread.abort?view=net-5.0]
using System; using System.Threading;
public class Example { static Thread thread1, thread2; public static void Main() { thread1 = new Thread(ThreadProc); thread1.Name = "Thread1"; thread1.Start(); thread2 = new Thread(ThreadProc); thread2.Name = "Thread2"; thread2.Start(); }
private static void ThreadProc() { Console.WriteLine("\nCurrent thread: {0}", Thread.CurrentThread.Name); if (Thread.CurrentThread.Name == "Thread1" && thread2.ThreadState != ThreadState.Unstarted) if (thread2.Join(TimeSpan.FromSeconds(2))) Console.WriteLine("Thread2 has termminated."); else Console.WriteLine("The timeout has elapsed and Thread1 will resume."); Thread.Sleep(4000); Console.WriteLine("\nCurrent thread: {0}", Thread.CurrentThread.Name); Console.WriteLine("Thread1: {0}", thread1.ThreadState); Console.WriteLine("Thread2: {0}\n", thread2.ThreadState); } } |
[링크 : https://docs.microsoft.com/ko-kr/dotnet/api/system.threading.thread.join?view=net-5.0]
using System; using System.Threading;
class Test { public static void Main() { Thread newThread = new Thread(new ThreadStart(TestMethod)); newThread.Start(); Thread.Sleep(1000);
// Abort newThread. Console.WriteLine("Main aborting new thread."); newThread.Abort("Information from Main.");
// Wait for the thread to terminate. newThread.Join(); Console.WriteLine("New thread terminated - Main exiting."); }
static void TestMethod() { try { while(true) { Console.WriteLine("New thread running."); Thread.Sleep(1000); } } catch(ThreadAbortException abortException) { Console.WriteLine((string)abortException.ExceptionState); } } } |
[링크 : https://docs.microsoft.com/ko-kr/dotnet/api/system.threading.thread.abort?view=net-5.0]