We may earn an affiliate commission when you visit our partners.
Course image
Dmitri Nesteruk

This course is about .NET Parallel Programming with C# and covers the core multithreading facilities in the .NET Framework, namely the Task Parallel Library (TPL) and Parallel LINQ (PLINQ).

This course will teach you about:

Read more

This course is about .NET Parallel Programming with C# and covers the core multithreading facilities in the .NET Framework, namely the Task Parallel Library (TPL) and Parallel LINQ (PLINQ).

This course will teach you about:

  • Task Programming: how to create and run tasks, cancel them, wait on them and handle exceptions that occur in tasks.

  • Data Sharing and Synchronization, ensuring your access to shared data also happens in a safe and consistent manner.

  • Concurrent Collections, such as ConcurrentBag, which operate correctly even when accessed from multiple threads.

  • Task Coordination concepts, including the idea of continuations, as well as uses of synchronization primitives to coordinate tasks.

  • Parallel Loops which let you easily iterate over a counter or collection while partitioning the data and processing it on separate threads.

  • Parallel LINQ, the parallel version of .NET's awesome Language-Integrated Query (LINQ) technology.

  • Async/Await and .NET's support for asynchronous programming.

This course is suitable for:

  • Beginner and experienced .NET/C# developers

  • Anyone interested in multi-threading, parallelism and asynchronous programming

The course consists of the following materials:

  • Video lectures showing hands-on programming

  • C# files that you can download and run

Before taking the course, you should be comfortable with the C# programming language and familiar with multi-threading.

Enroll now

What's inside

Learning objectives

  • Create and run independent tasks
  • Manage synchronized access to data
  • Effectively use parallel collections
  • Work with task continuations
  • Write parallel loops
  • Leverage the power of parallel linq
  • Master asynchronous programming (async/await)

Syllabus

Some information about the course author, what the course contains, how the material is presented and what you need to know before taking part in the course.

Read more
Working with Task, the fundamental .NET unit of work.

An overview of all the lectures in this section.

An introduction to the Task abstraction, with examples of how to create and start tasks.

A look at .NET's special CancellationTokenSource and CancellationToken classes that are used to cooperatively cancel running tasks.

If you're inside a task and want to wait a while, there are ways to do this besides Thread.Sleep().

How to wait on a single task or, indeed, a set of tasks.

If an exception is thrown inside a Task, who catches it, and how?

A summary of key concepts from this section's lectures.

Learn about key .NET synchronization primitives.

An overview of the lectures in this section.

The lock keyword and what it means.

Atomic operations on primitive values.

A lock that doesn't yield.

One of the key WaitHandle-based synchronization structures.

A look at reader-writer locks, including upgradeability and recursion support.

A summary of the lectures in this section.

Concurrent Collections

An overview of lectures in this section.

A thread-safe dictionary.

A thread-safe queue.

A thread-safe stack.

A collection which is similar, in principle, to a thread-safe List except it doesn't preserve the order. Thus it's called a Bag.

BlockingCollection is a special wrapper around the producer-consumer collection that is capable of blocking the producer thread until a value is available, and is capable of exposing a 'consuming enumerable' that blocks the consumer until there's an item for it to consume.

A summary of materials from the lectures in this section.

Using task continuations and synchronization objects to coordinate tasks.

An overview of lectures in this section.

Different forms of continuations exist.

Child tasks are tasks whose lifetime are joined to those of the parent.

A useful sync primitive for coordinating multi-phase algorithms.

A simple sync primitive with a counting-down value.

Ordinary signals which, depending on whether they are set or not, block or unblock a thread.

A complicated sync data structure which allows increasing/decreasing a counter to control how many threads can be executing at the same time.

Effectively use the Parallel class to parallelize loop evaluation.

Parallel loops... what could be simpler?

Learn to break out of or cancel parallel loops, and what happens if an exception is thrown.

Concurrent access from all tasks on each iteration to a variable is very inefficient. Why not access it once per task, and keep a task-local store of intermediate results that incurs no sync overhead?

Creating a delegate on each Task invocation is inefficient, but if we tell .NET how we want to partition data, we may end up with a much faster method.

A summary of materials from the lectures in this section.

Effectively use LINQ in a parallel setting.

AsParallel() turns an IEnumerable<T> into a ParallelQuery<T>

Just like with Task and Parallel.Xxx, PLINQ takes cancellation tokens and throws either AggregateException or OperationCancelledException.

How quickly do you want your data? Or should PLINQ cluster results together and return them in batches?

LINQ Aggregate() function has a special PLINQ overload.

Summary
Understand how C# supports asynchronous progrmaming with the 'async' and 'await' keywords

A detailed description of async/await mechanics.

A look at async/await in action... in a WinForms app.

Behind the scenes, async methods get their associated state machines.

Learn what Task.Run is used for.

Learn about Task.WhenAny/WhenAll.

C# doesn't have async constructors (yet), but factory methods are the next best thing.

A generalized way of indicating that your classes require asynchronous initialization.

We all love Lazy<T>, but can it play nice with async methods?

A brand new class introduced in .NET Core, ValueTask is a lightweight alternative to Task.

A summary of all the things we've learned in this section of the course.

A summary of the things we've learned in this entire course

Links to my other courses.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Effective for experienced and beginner .NET/C# developers looking to build multi-threaded applications with C#
Examines Task Parallel Library and Parallel LINQ, core multithreading facilities in the .NET Framework
Develops foundational multithreading skills to build responsive and effective applications
Covers intermediate-level multithreading concepts, making the learner ideal for teams with real-world use cases
Builds upon industry standard skills and tools, which may be beneficial for certain careers
Taught by Dmitri Nesteruk, a recognized expert in the field with over 10 years of experience

Save this course

Save Learn Parallel Programming with C# and .NET to your list so you can find it easily later:
Save

Reviews summary

Average course on parallel programming

According to students, this course on parallel programming with C# and .NET is average. Learners express some content and code quality issues, like errors and a lack of structure in section 7. Some say the instructor has good subject knowledge, but be aware that responses to questions may be delayed.
Instructor may be slow to respond to questions
"Instructor must reply to query of learner."
"someone is waiting for your reply."
"Instructor must think on that"
Code with errors
"code was not complied, i find that code is with errors."
"I find the code is with errors."
Section 7 is not well structured
"section-7 is not well structured."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Learn Parallel Programming with C# and .NET with these activities:
Review .NET Multithreading Fundamentals
Refreshes understanding of fundamental .NET multithreading concepts.
Browse courses on Multithreading
Show steps
  • Revisit the concept of threads and processes in .NET.
  • Review synchronization techniques such as locks and semaphores.
  • Recall the basics of task-based parallelism in .NET.
Async/Await Tutorial Series
Builds a strong foundation in asynchronous programming concepts through guided tutorials.
Browse courses on Async/Await
Show steps
  • Understand the fundamentals of async/await and its benefits.
  • Learn how to write asynchronous methods and handle exceptions.
  • Explore advanced async/await patterns and techniques.
Multithreading Study Group
Encourages collaboration and knowledge sharing through study group discussions.
Browse courses on Multithreading
Show steps
  • Discuss course concepts and exchange ideas with peers.
  • Solve problems and learn from different perspectives.
  • Stay motivated and accountable through regular group meetings.
  • Prepare for assessments and deepen understanding.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Task Parallel Library Exercises
Strengthens understanding of Task Parallel Library usage through hands-on exercises.
Browse courses on Task Parallel Library
Show steps
  • Create a set of tasks that perform independent operations.
  • Implement cancellation for tasks to handle asynchronous operations.
  • Synchronize access to shared data using locks or atomic operations.
Writing Parallel Loops Exercises
Improves proficiency in writing parallel loops through targeted exercises.
Browse courses on Parallel Programming
Show steps
  • Create parallel loops to process large data sets efficiently.
  • Handle exceptions and ensure thread safety in parallel loop implementations.
  • Optimize parallel loops for performance and scalability.
Parallel LINQ Video Tutorial
Enhances comprehension of Parallel LINQ concepts by creating an instructional video.
Show steps
  • Explain the principles of Parallel LINQ and its benefits.
  • Demonstrate how to parallelize data processing using PLINQ.
  • Discuss common pitfalls and best practices for using Parallel LINQ.
Multithreaded Application Project
Provides real-world experience in designing and implementing a multithreaded application.
Browse courses on Multithreading
Show steps
  • Define the problem and design a multithreaded solution.
  • Implement the multithreaded solution using appropriate techniques and patterns.
  • Test and debug the multithreaded application for correctness and performance.
  • Document the design and implementation of the multithreaded application.

Career center

Learners who complete Learn Parallel Programming with C# and .NET will develop knowledge and skills that may be useful to these careers:
Software Architect
As a Software Architect, you will be responsible for mapping out the software blueprint for the system to be developed. The course will be useful for you as it provides an overview of a system design in a structured manner.
Software Developer
As a Software Developer, you take part in the development of software programs that power a wide range of digital systems including desktop apps, mobile apps, web applications, and even embedded systems. The course will be useful for you as it focuses on debugging and optimization, techniques which are required to build high quality software applications.
DevOps Engineer
DevOps Engineers work with both the development and operations teams to ensure that the company's software is built, tested, and deployed efficiently and reliably. This course will be useful for you as it provides an introduction to the core topics involved in DevOps, including continuous integration, continuous delivery, and infrastructure automation.
Computer Systems Analyst
As a Computer Systems Analyst, you will be responsible for orchestrating the work of the software engineering team, and bridging communication between the team and the business unit. This course will be useful for you as it provides an introduction to concurrency and parallel programming, which are core topics in computer science.
Information Security Analyst
Information Security Analysts protect an organization's computer networks and systems from unauthorized access, use, disclosure, disruption, modification, or destruction. This course will be useful for you as it provides an introduction to the core topics involved in information security, including network security, data security, and security risk assessment.
Cloud Architect
Cloud Architects design and implement cloud computing solutions for businesses. This course will be useful for you as it provides an introduction to the core topics involved in cloud computing, including cloud infrastructure, cloud services, and cloud security.
Business Intelligence Analyst
Business Intelligence Analysts use data to make better decisions. This course will be useful for you as it provides an introduction to the core topics involved in business intelligence, including data analysis, data visualization, and data mining.
Systems Administrator
Systems Administrators manage and maintain computer systems, including servers, networks, and operating systems. This course will be useful for you as it provides an introduction to the core topics involved in systems administration, including system installation, system configuration, and system security.
Quality Assurance (QA) Engineer
In addition to testing, QA Engineers are involved in defining and implementing testing processes. This course will be useful for you as it provides an introduction to the core topics involved in software testing, including test planning, test execution, and defect reporting.
Data Analyst
As a Data Analyst, your work will involve exploring data using statistical analysis, data mining, predictive analytics, and more. This course will be useful as it provides an introduction to the core topics involved in data analysis, including data wrangling, visualization, and data interpretation.
Database Administrator
Database Administrators ensure that the database is available, reliable, and secure. This course will be useful for you as it provides an introduction to the core topics involved in database administration, including database design, database maintenance, and database security.
Web Developer
Besides writing code, you will also work with designers to understand the needs of the business and how to implement them in code, as well as collaborate with other developers to decide on the best way to architect the code. This course will be useful for building a solid foundation in the principles of web development including data management, security, and performance optimization.
Machine Learning Engineer
Machine Learning Engineers develop and implement machine learning algorithms to solve real-world problems. This course may be useful as it provides an introduction to the core topics involved in machine learning, including data preprocessing, model training, and model evaluation.
Data Scientist
The data you work with will often be in the form of timeseries, images, or text. Dealing with these kinds of data requires specialized knowledge in the fields of statistics, data mining, machine learning, and distributed computing. This course may be useful as it provides an introduction to these core topics involved in data science.
Computer Hardware Engineer
Computer Hardware Engineers work to develop the cutting-edge microchips that underpin all modern computer systems. This course may be useful as it provides an introduction to the fundamentals of computer hardware design.

Reading list

We've selected seven books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Learn Parallel Programming with C# and .NET.
Provides a deep dive into the Common Language Runtime (CLR), which is the foundation for parallel programming in C#.
Provides a collection of best practices and design patterns for writing effective C# code.
Provides a comprehensive overview of synchronization primitives in .NET.
Provides a comprehensive overview of the C# language, including its syntax, semantics, and features.
Provides a classic collection of design patterns for object-oriented software development.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Here are nine courses similar to Learn Parallel Programming with C# and .NET.
Advanced .NET with TPL & PLINQ: Conducting Performance...
Most relevant
Building Multithreaded C# 8 Applications with the Task...
Most relevant
C# for .NET Developers
Most relevant
Learn Multithreading with Modern C++
Most relevant
Complete Guide to Python Multithreading and...
Most relevant
Asynchronous Programming in C#
Most relevant
Beyond Basic Programming - Intermediate Python
Most relevant
Java Multithreading, Concurrency & Performance...
Most relevant
.Net Full Stack Foundation
Most relevant
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser