ARTICLE

Join, Sleep and Abort methods in C# Threading

Posted by Akshay Teotia Articles | Multithreading in C# November 24, 2011
A thread class consists of a number of methods. the join() and sleep() methods are two of them.
Reader Level:

join and sleep

The thread class consists of a number of methods, the join() and sleep() methods are two of them. The thread.join() method is used to call a thread and Blocks the calling thread until a thread terminates i.e Join method waits for finishing other threads by calling its join method. 

Whenever the thread.sleep() method are generally used to Block the current thread for the specified number of milliseconds.  In other words, we can say that it suspends the current thread for a specified time.

Example

using System;
using System.Diagnostics;
using System.Threading;
namespace joinandsleep
{
    class Program
    {
         static void Run()
        {
            for (int i = 0; i < 50; i++) Console.Write("C#corner");
        }
       
        static void Main(string[] args)
        {
            Thread th = new Thread(Run);
            th.Start();
            th.Join();
            Console.WriteLine("Thread t has terminated !");
            Console.Read();
         }
    }
}

Output :

bb.gif

This prints "C#corner" 50 times, after that "Thread t has terminated". You can include a timeout when calling Join, either in milliseconds or as a TimeSpan. It then returns true if the thread ended or false if it timed out.

We can include spacific time via thread.sleep() method like as:

Thread.Sleep (TimeSpan.FromHours (1)); // sleep for 1 hour
Thread.Sleep (1000);                            // sleep for 1000 milliseconds

While waiting on a Sleep() or Join(), a thread is blocked and so does not consume CPU resources.

abort()

The thread.abort() method are used to start the process of terminating the thread. we are calling this method usually terminates the thread. it raised a System.Threading.ThreadingAbortException in the thread on which it is invoked.

using System;
using System.Threading;
using System.Diagnostics; 
namespace workingofabort
{
    class akshay
 {
        static Thread th;
        static void ChildThread()
        {
            try
            {
                throw new Exception();
            }
            catch (Exception)
            {
               try
                {
                    Console.WriteLine("thread are going to sleep mode");
                     Thread.Sleep(5000);
                    Console.WriteLine("now thread is out of sleep");
               }
                catch (ThreadAbortException e)
                {
                    Console.WriteLine(e.ToString());
                }
            }
        }
        static void Console_CancelKeyPress(Object sender, ConsoleCancelEventArgs e)
        {
           Console.WriteLine("aborting");
            if (th != null)
            {|
               th.Abort();
                th.Join();
            }
        }       
       static void Main(string[] args)
        {
            Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);
           th = new Thread(ChildThread);
           th.Start();
            th.Join();
            Console.Read();
        }
    }
}

Output

aa

Login to add your contents and source code to this article
post comment
     
COMMENT USING
PREMIUM SPONSORS
DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and add new content to existing PDF documents from within your applications.
SPONSORED BY
  • PDF reports have never been easier to create. With our included WYSIWYG Designer, you can layout your reports, set up your data source and let DynamicPDF ReportWriter do the rest.