Wait for a Thread to Finish in C#

  1. Wait for a Thread to Finish With the Task.WaitAll() Method in C
  2. Wait for a Thread to Finish With the Thread.Join() Method in C

This tutorial will discuss the methods of waiting for the completion of a thread in C#.

Wait for a Thread to Finish With the Task.WaitAll() Method in C

The Task.WaitAll() method in C# is used to wait for the completion of all the objects of the Task class. The Task class represents an asynchronous task in C#. We can start threads with the Task class and wait for the threads to finish with the Task.WaitAll() method in C#.

using System;
using System.Threading.Tasks;

namespace wait_for_thread
{
    class Program
    {
        static void fun1()
        {
            for(int i = 0; i < 2; i++)
            {
                Console.WriteLine("Thread 1");
            }
        }
        static void fun2()
        {
            for (int i = 0; i < 2; i++)
            {
                Console.WriteLine("Thread 2");
            }
        }
        static void Main(string[] args)
        {
            Task thread1 = Task.Factory.StartNew(() => fun1());
            Task thread2 = Task.Factory.StartNew(() => fun2());
            Task.WaitAll(thread1, thread2);
            Console.WriteLine("The End");
        }
    }
}

Output:

Thread 1
Thread 1
Thread 2
Thread 2
The End

In the above code, we waited for the completion of the thread1 and thread2 tasks inside the main thread with the Task.WaitAll() method in C#.

Wait for a Thread to Finish With the Thread.Join() Method in C

In the above section, we discussed how we could wait for a thread with the Task.WaitAll() method in C#. We can also achieve the same goal with the Thread.Join() method in C#. The Thread.Join() method halts the execution of the calling thread until the current thread completes its execution. The following code example shows us how to wait for a thread to complete its execution with the Thread.Join() method in C#.

using System;
using System.Threading.Tasks;

namespace wait_for_thread
{
    class Program
    {
        static void fun1()
        {
            for(int i = 0; i < 2; i++)
            {
                Console.WriteLine("Thread 1");
            }
        }
        static void fun2()
        {
            for (int i = 0; i < 2; i++)
            {
                Console.WriteLine("Thread 2");
            }
        }
        static void Main(string[] args)
        {
            Thread thread1 = new Thread(new ThreadStart(fun1));
            Thread thread2 = new Thread(new ThreadStart(fun2));
            
            thread1.Start();
            thread1.Join();
            thread2.Start();
            thread2.Join();
            Console.WriteLine("The End");
        }
    }
}

Output:

Thread 1
Thread 1
Thread 2
Thread 2
The End

In the above code, we waited for the thread1 and thread2 threads to finish inside the main thread with the Thread.Join() method in C#.

Contribute
DelftStack is a collective effort contributed by software geeks like you. If you like the article and would like to contribute to DelftStack by writing paid articles, you can check the write for us page.

Related Article - Csharp Thread

  • Thread vs Task in C#