Skip to content

Concurrency Kit

Get it now in the Unity Asset Store!

The Concurrency Kit is a .NET/Mono kit that includes a port of the Task Parallel Library and extends it to support FibersCoroutines, and Unity. Fibers allow code paths to execute concurrently using a single thread by leveraging the co-operative yielding behavior of coroutines.

// Start task 1
var t1 = Task.Factory.StartNew(() => PatHead());

// Start task 2
var t2 = Task.Factory.StartNew(() => RubTummy());

// This task will complete when t1 and t2 complete and
// then it will continue by executing a happy dance.
Task.WhenAll(t1, t2).ContinueWith(t3 => HappyDance());

Because code written in this manner is designed with concurrency in mind, tasks can run in parallel across multiple threads or as concurrent fibers on a single thread by changing out the task scheduler. This flexibility makes it easy to write and maintain portable asynchronous code that scales.

  • Write more maintainable, more performant asynchronous code
  • Use the .NET 4+ asynchronous task model in your designs – it’s feature rich and the framework standard going forward
    public class HttpClient {
      public Task GetAsync(
        string requestUri);
    
      public Task PostAsync(
        string requestUri,
        HttpContent content);
    }
    
  • Start a background task using the thread pool and complete the operation on the main thread
  • Declaratively schedule workflows with chained asynchronous tasks and anonymous delegates
    Task.Factory.StartNew(() => DoSomethingFromThreadPool()).
      ContinueWith(lastTask => DoSomethingFromMainThread(), 
      mainThreadScheduler);
    
  • Coordinate between concurrently executing tasks
    Task.Factory.ContinueWhenAny(tasksToRun, 
      winner => print("The winner is: " + winner));
    
  • Easily cancel tasks in progress
    CancellationTokenSource tokenSource = new CancellationTokenSource();
    void Start()
    {
      Task.Factory.StartNew(() => DoSomething(), tokenSource.Token);
    }
    void OnClick()
    {
      tokenSource.Cancel();
    }
    
  • Leverage multiple CPU cores for maximum throughput
  • Maximize individual thread usage with co-operative multitasking and task inlining
  • Control how tasks are scheduled and the level of concurrency

See the API Reference for what is included or learn more about the Concurrency Kit.