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 7. Interop

Asynchronous, parallel, reactive—each has its place, but how well do they work together?

In this chapter, we’ll look at various interop scenarios where we will learn how to combine these different approaches. We’ll learn that they complement each other, rather than compete; there is very little friction at the boundaries where one approach meets another.

7.1. Async Wrappers for “Async” Methods with “Completed” Events

Problem

There is an older asynchronous pattern that uses methods named OperationAsync along with events named OperationCompleted. You wish to perform an operation like this and await the result.

Tip

The OperationAsync and OperationCompleted pattern is called the Event-based Asynchronous Pattern (EAP). We’re going to wrap those into a Task-returning method that follows the Task-based Asynchronous Pattern (TAP).

Solution

You can create wrappers for asynchronous operations by using the TaskCompletionSource<TResult> type. This type controls a Task<TResult> and allows you to complete the task at the appropriate time.

The following example defines an extension method for WebClient that downloads a string. The WebClient type defines DownloadStringAsync and DownloadStringCompleted. Using those, we can define a DownloadStringTaskAsync method as such:

public static Task<string> DownloadStringTaskAsync(this WebClient client,
    Uri address)
{
    var tcs = new TaskCompletionSource<string>();

    // The event handler will complete the task and unregister itself.
    DownloadStringCompletedEventHandler ...
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