Stephen Toub - MSFT

Partner Software Engineer, .NET

Stephen Toub is a developer on the .NET team at Microsoft.

Post by this author

Little-known gems: Atomic conditional removals from ConcurrentDictionary

ConcurrentDictionary<TKey,TValue>, first introduced in .NET 4, is an efficient dictionary data structure that enables thread-safe reading and writing, meaning that multiple threads may all be accessing the dictionary at the same time without corrupting it.  It supports adding through its TryAdd method, conditional updates through ...

SpinWait.SpinUntil for unit testing

One of the hidden gems in .NET 4 is the System.Threading.SpinWait type.  This type is typically used for implementing lock-free solutions, and is used heavily throughout the rest of the threading and parallelism support in .NET 4.  That’s why I call it “hidden”, because most folks don’t implement their own ...

TPL Dataflow on TC Labs

After releasing a CTP of TPL Dataflow as part of the Async CTP, we had multiple requests for a standalone download for just the System.Threading.Tasks.Dataflow.dll.  Thanks to everyone who asked for this, and as of this morning, such an installer for an updated version of the preview is now available!  This is part of a ...

Parallel Computing Virtual Labs on MSDN

Interested in trying out the support for parallel computing in Visual Studio 2010 or .NET 4, but don’t have either installed?  No problem.  You can now use the MSDN Virtual Labs site to try these out from the comforts of your favorite browser (that supports ActiveX).  Multiple labs are available: Enjoy...

AsyncLazy

A question I’ve seen come up from time to time is “Why doesn’t Lazy<T> support asynchronous initialization?”  It’s a fair question.  After all, if you’re using Lazy<T> because you have an expensive resource you want to delay the creation of until it’s absolutely needed, it’s...

await anything;

One of the very cool things about the new await keyword in C# and Visual Basic is that it’s pattern based.  It works great with Task and Task<TResult>, and awaiting those two types will represent the vast majority of uses, but they’re by no means the only types that can be awaited.  The languages support awaiting ...

Interested in working on Technical Computing? We’re hiring!

The Parallel Computing Platform team is part of a larger organization at Microsoft focused on technical computing, which as Wikipedia describes it “is the application of the mathematical and computational principles of scientific computing to solve practical problems of industrial interest.”  Suffice it to say that there are a...

Await, and UI, and deadlocks! Oh my!

It’s been awesome seeing the level of interest developers have had for the Async CTP and how much usage it’s getting.  Of course, with any new technology there are bound to be some hiccups.  One issue I’ve seen arise now multiple times is developers accidentally deadlocking their application by blocking their UI ...

Processing Sequences of Asynchronous Operations with Tasks

Of late, I’ve seen multiple folks asking about how to use tasks to asynchronously execute a sequence of operations.  For example, given three synchronous functions: public string DoA(string input); public string DoB(string aResult); public string DoC(string bResult); you could invoke these functions with code like...

TPL Dataflow preview available for download

As mentioned here, the Visual Studio Async CTP is now available for download from https://msdn.com/vstudio/async.  Not only does this download add language support into C# and Visual Basic for writing asynchronous methods (in which you can easily “await” tasks), it also includes a new .NET library we lovingly refer to as &...