Skip to Content
Concurrency in C# Cookbook
book

Concurrency in C# Cookbook

by Stephen Cleary
June 2014
Intermediate to advanced
208 pages
4h 21m
English
O'Reilly Media, Inc.
Content preview from Concurrency in C# Cookbook

Chapter 12. Scheduling

When a piece of code executes, it has to run on some thread somewhere. A scheduler is an object that decides where a certain piece of code runs. There are a few different scheduler types in the .NET framework, and they’re used with slight differences by parallel and dataflow code.

I recommend that you not specify a scheduler whenever possible; the defaults are usually correct. For example, the await operator in asynchronous code will automatically resume the method within the same context, unless you override this default, as described in Recipe 2.7. Similarly, reactive code has reasonable default contexts for raising its events, which you can override with ObserveOn, as described in Recipe 5.2

However, if you need other code to execute in a specific context (e.g., a UI thread context, or an ASP.NET request context), then you can use the scheduling recipes in this chapter to control the scheduling of your code.

12.1. Scheduling Work to the Thread Pool

Problem

You have a piece of code that you explicitly want to execute on a thread-pool thread.

Solution

The vast majority of the time, you’ll want to use Task.Run, which is quite simple. The following code blocks a thread-pool thread for two seconds:

Task task = Task.Run(() =>
{
    Thread.Sleep(TimeSpan.FromSeconds(2));
});

Task.Run also understands return values and asynchronous lambdas just fine. The task returned by Task.Run in the following code will complete after two seconds with a result of 13:

Task<int> task = Task ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

Concurrency in C# Cookbook, 2nd Edition

Concurrency in C# Cookbook, 2nd Edition

Stephen Cleary
Concurrency in .NET

Concurrency in .NET

Riccardo Terrell

Publisher Resources

ISBN: 9781491906675Errata Page