Sign In Start Free Trial
Account

Add to playlist

Create a Playlist

Modal Close icon
You need to login to use this feature.
  • Book Overview & Buying Multithreading with C# Cookbook, Second Edition
  • Table Of Contents Toc
  • Feedback & Rating feedback
Multithreading with C# Cookbook, Second Edition

Multithreading with C# Cookbook, Second Edition

By : Agafonov
2.8 (4)
close
close
Multithreading with C# Cookbook, Second Edition

Multithreading with C# Cookbook, Second Edition

2.8 (4)
By: Agafonov

Overview of this book

Multi-core processors are synonymous with computing speed and power in today’s world, which is why multithreading has become a key concern for C# developers. Multithreaded code helps you create effective, scalable, and responsive applications. This is an easy-to-follow guide that will show you difficult programming problems in context. You will learn how to solve them with practical, hands-on, recipes. With these recipes, you’ll be able to start creating your own scalable and reliable multithreaded applications. Starting from learning what a thread is, we guide you through the basics and then move on to more advanced concepts such as task parallel libraries, C# asynchronous functions, and much more. Rewritten to the latest C# specification, C# 6, and updated with new and modern recipes to help you make the most of the hardware you have available, this book will help you push the boundaries of what you thought possible in C#.
Table of Contents (13 chapters)
close
close
12
Index

Determining a thread state

This recipe will describe the possible states a thread could have. It is useful to get information about whether a thread is started yet or whether it is in a blocked state. Note that because a thread runs independently, its state could be changed at any time.

Getting ready

To work through this recipe, you will need Visual Studio 2015. There are no other prerequisites. The source code for this recipe can be found at BookSamples\Chapter1\Recipe5.

How to do it...

To understand how to determine a thread state and acquire useful information about it, perform the following steps:

  1. Start Visual Studio 2015. Create a new C# console application project.
  2. In the Program.cs file, add the following using directives:
    using System;
    using System.Threading;
    using static System.Console;
    using static System.Threading.Thread;
  3. Add the following code snippet below the Main method:
    static void DoNothing()
    {
      Sleep(TimeSpan.FromSeconds(2));
    }
    
    static void PrintNumbersWithStatus()
    {
      WriteLine("Starting...");
      WriteLine(CurrentThread.ThreadState.ToString());
      for (int i = 1; i < 10; i++)
      {
        Sleep(TimeSpan.FromSeconds(2));
        WriteLine(i);
      }
    }
  4. Add the following code snippet inside the Main method:
    WriteLine("Starting program...");
    Thread t = new Thread(PrintNumbersWithStatus);
    Thread t2 = new Thread(DoNothing);
    WriteLine(t.ThreadState.ToString());
    t2.Start();
    t.Start();
    for (int i = 1; i < 30; i++)
    {
      WriteLine(t.ThreadState.ToString());
    }
    Sleep(TimeSpan.FromSeconds(6));
    t.Abort();
    WriteLine("A thread has been aborted");
    WriteLine(t.ThreadState.ToString());
    WriteLine(t2.ThreadState.ToString());
  5. Run the program.

How it works...

When the main program starts, it defines two different threads; one of them will be aborted and the other runs successfully. The thread state is located in the ThreadState property of a Thread object, which is a C# enumeration. At first, the thread has a ThreadState.Unstarted state. Then, we run it and assume that for the duration of 30 iterations of a cycle, the thread will change its state from ThreadState.Running to ThreadState.WaitSleepJoin.

Tip

Note that the current Thread object is always accessible through the Thread.CurrentThread static property.

If this does not happen, just increase the number of iterations. Then, we abort the first thread and see that now it has a ThreadState.Aborted state. It is also possible that the program will print out the ThreadState.AbortRequested state. This illustrates, very well, the complexity of synchronizing two threads. Keep in mind that you should not use thread abortion in your programs. I've covered it here only to show the corresponding thread state.

Finally, we can see that our second thread t2 was completed successfully and now has a ThreadState.Stopped state. There are several other states, but they are partly deprecated and not as useful as those we examined.

Create a Note

Modal Close icon
You need to login to use this feature.
notes
bookmark search playlist font-size

Change the font size

margin-width

Change margin width

day-mode

Change background colour

Close icon Search
Country selected

Close icon Your notes and bookmarks

Delete Bookmark

Modal Close icon
Are you sure you want to delete it?
Cancel
Yes, Delete

Delete Note

Modal Close icon
Are you sure you want to delete it?
Cancel
Yes, Delete

Edit Note

Modal Close icon
Write a note (max 255 characters)
Cancel
Update Note

Confirmation

Modal Close icon
claim successful

Buy this book with your credits?

Modal Close icon
Are you sure you want to buy this book with one of your credits?
Close
YES, BUY