Concurrency Kit C#: Concurrency library based on Fibers, Coroutines, Tasks, and Threads
C# CSS Other
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
Docs
Doxygen
MonoDoc
Source
.gitignore
.gitlab-ci.yml
Doxyfile
LICENSE.md
README.md
gulpfile.js
gulpfile.ts
package.json
tsconfig.json
yarn.lock

README.md

Spicy Pixel Concurrency Kit

Download it now in the Unity Asset Store | Get the Source Code on GitHub

The Concurrency Kit is a .NET / Mono kit that includes a port of the Task Parallel Library and extends it to support Fibers, Coroutines, 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.

Interoperability

Use the feature rich asynchronous task model in your designs.

	public class HttpClient {
	  public Task<HttpResponseMessage> GetAsync(
	    string requestUri);
	 
	  public Task<HttpResponseMessage> PostAsync(
	    string requestUri,
	    HttpContent content);
	}

Usability

  • 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();
	}

Performance

  • 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

Productivity

  • Write more maintainable, more performant asynchronous code

Learn More

Learn more by reading the Conceptual Documentation or API Reference.

See Building the Kit for information on compiling.


Copyright (c) 2012-2014 Spicy Pixel, Inc.