Chapter 7. Utilities for Async Code
The Task-based Asynchronous Pattern is designed to make it easy to
create utilities for working with Tasks.
Because all TAP methods give you a Task,
any special behavior we write for one TAP method, we can reuse against
others. In this chapter, we’ll look at some utilities for working with
Task, including:
Methods that look like TAP methods, but have useful special behavior rather than being asynchronous calls themselves
Combinators, which are methods which process
Tasks, generating useful newTasks based on themTools for canceling and showing progress during asynchronous operations
While a lot of these utilities already exist, it’s useful to see how easy it is to implement them yourself, in case you need similar tools in the future that aren’t provided by the .NET Framework.
Delaying for a Period of Time
The most simple long-running operation that you might want to
perform is possibly to do absolutely nothing for a length of time. This is
the equivalent of Thread.Sleep in the
synchronous world. In fact, you could implement it using Thread.Sleep in conjunction with Task.Run:
awaitTask.Run(()=>Thread.Sleep(100));
But this simple approach is wasteful. A thread is being used solely
to block for the time period, which is a waste. There is already a way to
have .NET call your code back after a period of time without using any
threads, the System.Threading.Timer
class. A more efficient approach would be to set up a Timer, then use a TaskCompletionSource ...
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