• Stars
    star
    144
  • Rank 254,544 (Top 6 %)
  • Language
    C#
  • License
    MIT License
  • Created almost 5 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Robust and efficient library for management of asynchronous operations in C#/.Net.

ProtoPromise

Promises/A+ logo

Robust and efficient library for management of asynchronous operations.

  • Allocation-free async operations
  • Cancelable operations with custom allocation-free CancelationToken/Source
  • Allocation-free async iterators with async Linq
  • Progress with enforced normalization
  • async/await support and .Then API
  • Thread safe
  • Full causality traces
  • Easily switch to foreground or background context
  • Combine async operations
  • Circular await detection
  • Interoperable with Tasks and Unity's Coroutines/Awaitables
  • CLS compliant

ProtoPromise conforms to the Promises/A+ Spec as far as is possible with C# (using static typing instead of dynamic), and further extends it to support Cancelations and Progress.

This library was built to work in all C#/.Net ecosystems, including Unity, Mono, .Net Framework, .Net Core, and AOT compilation. It is CLS compliant, so it is not restricted to only C#, and will work with any .Net language.

  • ProtoPromise v3 supports .Net Standard 2.0 or newer (Unity 2018.3 or newer).
  • ProtoPromise v2 supports .Net 3.5 or newer (Unity 5.5 or newer).

See Guides for information on how to install and use this library.

Compare performance to other async libraries:

Type Pending Mean Allocated Survived
ProtoPromise False 172.6 ns - -
Task False 260.9 ns 192 B -
UniTask False 306.8 ns - -
UnityFxAsync False 368.6 ns 360 B -
ValueTask False 337.4 ns - -
ProtoPromise True 1,402.3 ns - 648 B
Task True 2,110.8 ns 1120 B -
UniTask True 1,817.7 ns - 744 B
UnityFxAsync True 1,998.2 ns 1952 B -
ValueTask True 2,486.9 ns 968 B 40 B

See the C# Asynchronous Benchmarks Repo for a full performance comparison.

Latest Updates

v3.0.0 - March 18, 2020

  • Added UnityEngine.Awaitable extensions to convert to Promise.
  • Added API overloads accepting ReadOnlySpan<T> parameter.
  • Improved performance and reduced memory.
  • Removed support for runtimes older than .Net Standard 2.0.
  • Removed deprecated and useless APIs.

See ChangeLog for the full changelog.

Acknowledgements

This library was inspired by ES6 Promises, RSG Promises, uPromise, TPL, UniTask, AsyncEx, and UnityAsync.