Concurrency and Parallelism in Real Life Development

Using the event sourcing support in the Marten library as a real world example, we're going to look at strategies to handle potential concurrency issues within our server side applications. We'll examine the usage of offline optimistic locking, serializable transactions, and very carefully use offline pessimistic locking. Doing a deep dive into Marten's asynchronous event projection processing, I'll show some strategies for parallelizing work through the producer/consumer pattern. We'll also examine how Marten parallelized work through data sharding, leader election, and work assignment throughout an application cluster. Just to make things harder, we'll also talk about the necessary instrumentation and error handling it's taken to keep all that parallel work synchronized in the face of intermittent errors.

Jeremy Miller is the Senior Director of Software Architecture for MedeAnalytics. Jeremy began his software career writing "Shadow IT" applications to automate his tedious engineering documentation, then wandered into software development because it looked like more fun. Jeremy is heavily involved in open source .NET development as the author of Lamar, Oakton, Jasper, and as the lead developer of Marten. Jeremy occasionally manages to write about various software topics at

picture of Jeremy Miller

Jeremy Miller

Senior Director of Software Architecture at MedeAnalytics