Lee Campbell

Helping people get great software into the world


Have you recognised the need to go reactive and therefore have adopted Rx? Now that you have are you hitting some of the growing pains that everyone faces after they get past the “hello world” examples? Lee is available to do onsite training to help you overcome these hurdles and get your team coding at full speed.


Practical Rx (.NET) – 2 days

By attending this course, you will acquire the skills to think reactively. These skills will extend your ability to reason, visualise and communicate about concurrent and asynchronous problems. With a deeper understanding of the challenges, and rewards, of asynchronous and concurrent coding, you will be able to create elegant solutions through educated design decisions.

This course is a practitioner’s guide to Reactive Extensions, taught by Lee Campbell. The course has been presented in USA, England, Ireland, Switzerland and Australia with attendees from industry sectors such as Military, Finance, Utilities and Health Care. Through a combination of programming exercises and discussion, you will learn how to think in Rx. Lee Campbell has been working with Reactive Extensions since Feb 2010, and is the author of the widely read and praised Introduction to Rx and its companion website IntroToRx.com. He works with Rx on a daily basis and will share lessons he has learnt building complex systems in Rx that are in production today.

The primary focus of the training will be to gain a deep understanding of Rx and how best to apply it. This session will cover application development for both client and server, with different programming challenges aimed at thick client, web, and server technologies.

This course will be a mix of lectures, sample code and hands on coding challenges. Participants will be encouraged to interact with the presenter and other participants. Code samples will be provided in C#, JavaScript, Java and Scala. Participants are expected to provide their own laptop with either (or both):

  • Visual Studio that supports .NET 4.5 (2012, 2013 or 2015), and have a working understanding of C#. A test runner that can run NUnit tests.
  • Your favourite JavaScript IDE and a working understanding of JavaScript


Participant Level

The course is aimed at those familiar with .NET and C#, but without preference to server or client developers. Familiarity with existing forms of asynchrony and concurrency in .NET/JS architectures is helpful, but by no means necessary.

Client Requirements

The client will be expected to provide a suitable room to host the presenter and the attendees. The attendees or the client will need to provide the workstations/laptops to do the coding exercises on. A projector or large TV will be needed to present from and ideally a flip chart or large white board for sketching should be available. The content will need to be able to be transferred to the attendee PCs via either internet (github + nuget) or USB. If this is an issue then arrangements will need to be made at least 3 days in advance to get hte content onto the corporate network.

There is a maximum of 16 attendees.

Course Material

Understanding sequences in space

  • Enumerable, iterable and basic array manipulation
  • Compare imperative and declarative coding styles
  • Visualise sequences and queries with Marble diagrams
  • Lazy and eager evaluation trades offs
  • Infinite sequences
  • Sequence projection, filtration, aggregation and combination

Asynchronous request-response

  • Review legacy .NET/JS patterns
  • Futures and Promises
  • Long running computations
  • I/O with Futures
  • Continuations, Error handling and cancellation
  • Async/await (.NET only)

Introduction of the observable sequence

  • Try and Option Monad
  • The 4 quadrants : scalar, vector, future & observable sequence
  • Declarative queries revisited
  • The power operators
  • Termination

Resource management

  • Sharing sequences
  • Subscriptions
  • Can Rx leak memory? IDisposable and GC refresher
  • Best practices for managing resources

Rx operators in depth

  • Understanding the Rx operators
  • Creating custom operators; how and when
  • Solving problems with Rx; How to think Rx


  • Implicit and explicit
  • Schedulers
  • Concurrency, contention and deadlocks
  • Appropriate usage of concurrency


  • Unit testing observable sequences
  • Taming concurrent code in tests

Coding Electives

  • Deep property notification
  • Rx to PouchDB or EventStore
  • Rx over the wire using SignalR
  • Progressive enablement in WPF
  • Responsive UIs with Rx (HTML5/WPF)


Attendee feedback

The exercises were very well thought out and increased nicely in difficulty. It was also good to see that most of the exercises were based on real world problems rather than abstract proof of concept issues.


A very good mix of exercises to see different aspects of the framework.


At the end of the first day, you know you have made a very good choice coming to the course as you are exposed to more real world examples that you could hardly understand the day before and you are now confident/comfortable enough to complete.


By far the most practically useful course I’ve been on. Since attending, I’ve already put to use knowledge gained on the course (Switch and Replay anyone?) in production code, greatly reducing the complexity of previous attempts at the same functionality.


My feedback on the course is overwhelmingly positive.


Loved it!


Lee is engaging and easy to follow. Well paced and interactive.

%d bloggers like this: