The Microsoft.VisualStudio.Threading is a xplat library that provides many threading and synchronization primitives used in Visual Studio and other applications.
Clone or download
AArnott Merge pull request #408 from drewnoakes/apply-change-optimistically-o…

Overload ApplyChangeOptimistically to take operand
Latest commit 67b1257 Dec 10, 2018


NuGet package Build Status Join the chat at

Analyzers: NuGet package


  • Async versions of many threading synchronization primitives
    • AsyncAutoResetEvent
    • AsyncBarrier
    • AsyncCountdownEvent
    • AsyncManualResetEvent
    • AsyncReaderWriterLock
    • AsyncSemaphore
    • ReentrantSemaphore
  • Async versions of very common types
    • AsyncEventHandler
    • AsyncLazy<T>
    • AsyncLazyInitializer
    • AsyncLocal<T>
    • AsyncQueue<T>
  • Await extension methods
    • Await on a TaskScheduler to switch to it. Switch to a background thread with await TaskScheduler.Default;
    • Await on a Task with a timeout
    • Await on a Task with cancellation
  • JoinableTaskFactory that allows you to schedule asynchronous or synchronous work that does not deadlock with the UI thread even when the UI thread needs to synchronously block on the result.


Supported platforms

  • .NET 4.5
  • .NET Standard 1.1
  • .NET Portable (Profile111)