Skip to content
This repository has been archived by the owner on Feb 16, 2024. It is now read-only.

Releases: neuecc/UniRx

Ver 7.1.0

01 Jul 12:12
Choose a tag to compare

Fix AsyncReactiveCommand constructor #365, thanks @TORISOUP
Fix Build error of UniRx.Example
Fix await behaviour of ReactiveProperty #419, thanks @TORISOUP

Other note, Added CircleCI UnitTest/Package Build

async/await is separated to , if error is occured, remove package(clean) and re-import.

Ver 7.0.0

06 Jun 03:28
Choose a tag to compare

UniRx.Async is separated to

Ver 6.2.2

12 Sep 14:40
Choose a tag to compare

This update is for Unity 2018.3(beta).

  • Add CancelletaionToken.RegisterWithoutCaptureExecutionContext
  • Fix warning about WWW on Unity 2018.3
  • Fix does not work UniRx.Async on Unity 2018.3

Ver 6.2.0(6.2.1)

19 Aug 18:23
Choose a tag to compare

Improve cancellation/exception handling in UniRx.Async.
All unhandled exception was routed to UniTaskScheduler.UnobservedTaskException(called UniTask/UniTaskVoid.Forget or when unhandled task was GCed)
OperationCanceledException can modify to AwaiterStatus.Canceled in async method and can ignore when routed to top.
New UniRx -> UniTaskTracker editor window can detect async/await memory leak easily.

  • Add UniTask.Run
  • Add UniTask.SwitchToSynchronizationContext
  • Add UniTask.Lazy
  • Add UniTask.Void
  • Add UniTask.SwitchToMainThread
  • Add UniTask.SuppressCancellationThrow
  • Add CancellationTokenSource.CancelAfterSlim
  • Add CancellationTokenSource.RegisterRaiseCancelOnDestroy
  • Add Progress.CreateOnlyValueChanged
  • Add UniTaskScheduler(UnobservedTaskException/PropagateOperationCanceledException/UnobservedExceptionWriteLogType/DispatchUnityMainThread)
  • Add Task.AsUniTask(bool useCurrentSynchronizationContext)
  • Add await support to ValueTuple
  • Add UniRx -> UniTaskTracker editor window
  • Add Dropdown.OnValueChangedAsync
  • Add Dropdown.OnValueChangedAsObservable
  • Add StackTrace.CleanupAsyncStackTrace
  • Add Exception.CleanupAsyncStackTrace
  • Add ReactiveProperty.WaitUntilValueChangedAsync(CancellationToken)
  • Add ReactiveCommand.WaitUntilExecuteAsync(CancellationToken)
  • Add AwaiterStatus.IsCompleted/IsCompletedSuccessfully/IsCanceled/IsFaulted extension methods
  • Fix UniTask.SwitchToThreadPool does not yield correctly
  • Fix UniTask.SwitchToTaskPool does not yield correctly
  • Fix IEnumerable[UniTask] shortcut #336, thanks @reqweldzen
  • Fix Propagate Canceled status when throws OperationCanceledException
  • Improve AsyncTriggers throws OperationCanceledException when trigger was destroyed
  • Improve unhandled exception was routed to UniTaskScheduler.UnobservedTaskException when unahandled task was GCed
  • Improve peformance UniTask.WhenAll
  • Improve performance UniTask.Yield
  • Improve reduce AsyncStateMachine garbage
  • Improve UniTask.ToString shows status
  • Breaking Changes UniTask.WithCancellation is removed(use SuppressCancellationThrow instead)
  • Internaly Unit test moved to Unity Test Runner


  • Improve Enumerable.Select(async x => { }) returns IEnumerable<UniTask<T>> instead of IEnumerable<Task<T>>
  • Improve performance single uGUI async event handling
  • Fix button.OnInvokeAsync -> button.OnClickAsync
  • Add AsyncUnityEventHandler.OnInvokeAsyncSuppressCancellationThrow
  • Fix AsyncTriggers does not work correctly

Ver 6.1.2

24 Jul 14:45
Choose a tag to compare
  • Fix compile error in C# 6.0
  • Add UniTask[UniTask[]].Unwrap
  • Add IEnumerable[UniTask].GetAwaiter(UniTask.WhenALl shortcut)
  • Add WithCancellationWithoutException
  • Add UniTask.WithIsCancled
  • Improve performance Task.WhenAll
  • Improve performance UniTask.Timeout
  • Breaking Change Add IAwaiter.AwaiterStatus

Ver 6.1.1

21 Jul 20:17
Choose a tag to compare


  • Add await support to JobHandle
  • Add await support to WWW
  • Add await support to ReactiveProperty
  • Add await support to ReactiveCommand
  • Add await support to uGUI events( button.GetAsyncEventHandler, button.OnCliCkAsync, etc...)
  • Add await support to monobehaviour events( UniRx.Async.Triggers )
  • Add UniTask[T].ToCoroutine
  • Add UniTask.WaitUntil
  • Add UniTask.WaitWhile
  • Add UniTask.WaitUntilValueChanged
  • Add UniTask.WaitUntilValueChangedWithIsDestroyed
  • Add UniTask.SwitchToThreadPool
  • Add UniTask.SwitchToTaskPool
  • Add UniTask.ConfigureAwait
  • Add UniTask.WithCancellation
  • Add UniTask.FromCanceled
  • Add UniTask.Forget
  • Add UniTask.ContinueWith
  • Add Task.ConfigureAwait
  • Add UniTask.DelayFrame
  • Add UniTask.Delay(..., bool ignoreTimeScale = false, ...) parameter
  • Add AsyncEventHandler that enables async/await based eventhandling
  • Add UniRx.Async.Triggers that enables async/await based monobehaviour event handling
  • Add Progress.Create that is lightweight Progress(no use SynchronizationContext) factory
  • Add assembly definition UniRx.Async
  • Improve UniRx.Async.Delay, DelayFrame, Wait, WaitUntil, WaitUntilValueChanged, WaitUntilValueChangedWithIsDestroyed can reuse task to reduce garbage
  • Improve Unity AsyncObject await handling(has three methods GetAwaiter, ToUniTask, ConfigureAwait)
  • Improve UniTask[T].Timeout cancellation handling more correctly
  • Fix general cancellation handling in 6.0.0's async operators
  • Fix ReadOnlyReactiveProperty.Dispose does not unsubcribe source subscription(from 6.0.0)
  • Fix PlayerLoop item handling
  • Breaking Changes UniTask.Delay(int frameCount) to UniTask.Delay(int millisecondsDelay)
  • Breaking Changes Promise[T] to UniTaskCompletionSource[T]
  • Breaking Changes IPromise[T] to IAwaiter[T]


  • Add IObservable[T].ToUniTask
  • Add UniTask[T].ToObservable
  • Add assembly definition UniRx
  • Auto publish OnError message from "FromCoroutine"/"FromMicroCoroutine" #232, thanks @TORISOUP
  • Fixed bug, caused by boolean typo in ObjectPool.StartShrinkTimer. #248, thanks @Joshualight
  • Add joint trigger (OnJointBreak() + OnJointBreak2D()) #249, thanks @lopespm
  • keep stacktrace when throws an exception #251, thanks @jimmylovesiren
  • Fixed TakeUntil to respect official definition #269, thanks @silphid
  • If the field is in the base class, the inspector can not access it. Fix. #284, thanks @Bezarius
  • Change "Sample" operator behavior. #296, thanks @TORISOUP
  • Fix countChanged dispose #302, thanks @RDeluxe
  • Add try catch block to handle exception when finishing ContinueWith #312, thanks @sheepbeo
  • Add notifyCurrentCount option to ReactiveDictionary.ObserveCountChanged #321, thanks @faidra
  • fix ContinueWith disposing immediately #322, thanks @jimmylovesiren

ver 6.0.0

10 Jul 18:59
Choose a tag to compare

Improvement platform supports

  • Support .NET Standard 2.0
  • Support .NET 4.x
  • Support UWP on .NET/IL2CPP
  • Support C# 7.x on Incremental Compiler

UniRx.Async module on Unity Incremental Compiler(C# 7.x)

UniRx.Async is custom async/await support instead of Task.
This does not depend UniRx so you can use separate UniRx.Async package without UniRx.

  • Add UniTask, UniTask<T>, UniTaskVoid instead of Task, Task<T> and void
  • There work on custom async method builder in async/await(uses C# 7.0 task-like feature)
  • It no depends Task and SynchronizationContext, completely unity threading friendly and achives no-overhead, less garbage
  • UniTask.Delay, UniTask.Yield, UniTask.Timeout that is frame-based timer operators(no uses thread so works on WebGL publish) driven by custom PlayerLoop(Unity 2018 experimental feature)
  • UniTask.WhenAll, same as Task.WhenAll but you can get awaited value by tuple deconsruction syntax
  • UniTask.WhenAny, same as Task.WhenAny but you can get which index win
  • UniTask.ctor(Func<UniTask>) is like the embeded AsyncLazy<T>
  • Promise<T> is the lightweight edition of TaskCompletionSource<T>, the API is same as EcmaScript's Promise
  • await support for unity async objects(AsyncOperation, ResourceRequest, UnityWebRequestAsyncOperation, IEnumerator)

Redesigned ReactiveProperty and ReadOnlyReactiveProperty

  • Inlined publisher(prev design uses Subject<T>, current uses self iteration)
  • Returns subscription as node-self(does not create extra garbage on subscribe)
  • Removed ReactiveProperty.ctor(IObservable<T>) overload
  • Modified IObservable<T>.ToReactiveProperty returns IReadOnlyReactiveProperty<T>

Removed obsolete components

  • IEnumerable<T>.AsSafeEnumerable<T>
  • LazyTask<T>
  • UniRxSynchronizationContext
  • MainThreadDispatchType.AfterUpdate
  • ObservableMonoBehaviour
  • TypedMonoBehaviour
  • IPresenter, PresenterBase, PresenterBase<T>

ver 5.5.0

30 Sep 01:22
Choose a tag to compare

This release is available in AssetStore on 2016-10-04

New Experimental support for Unity .NET 4.6 async/await

Add: ObserveEveryValueChanged(bool fastDestroyCheck) overload
Add: Observable.Sample(intervalSourcea) overload, thanks @svermeulen
Fix: UWP Platform compile error
Breaking Changes: Remove workaround for Unity WWW dispose freeze bug

Unity 5.5.0xMono-Runtime-Upgrade-1-b4 Support details

use System.IObservable, IObserver instead of UniRx.IObservable, IObserver
use System.Tuple instad of UniRx.Tuple (but lost ValueType tuple, should we create other tuple?)
use System.IProgress instead of UniRx.Progress
use System.Threading.CancellationToken instead of UniRx.CancellationToken
add GetAwaiter to UniRx for supports async/await for IObservable
create UniRxSynchronizationContext to support async/await completly
add ToObservable to Task
supplemental Unity coroutine support async/await

ver 5.4.1

04 Sep 13:15
Choose a tag to compare

This release is available in AssetStore on 2016-09-08!/content/17276

Improvement: Support Unity 5.5 Beta
Fix: ThrottleFirstFrame throws NullReferenceException when stream sends OnNext immediately. #160, thanks @hsanno
Fix: Error on LogEntry.cs #164, thanks @kimsama
Fix: ToReadOnlyReactiveProperty should be distinct publishing #161
Fix: To(ReadOnly)ReactiveProperty cause strange result when source observable returns OnCompleted or OnError
(Breaking) Changes: PresenterBase was obsoleted(but it only commented, not marked [Obsolete])
Breaking Changes: Sample14 was removed
Breaking Changes: Removed ObservableMonoBehaviour, TypedMonoBehaviour in UNITY 5.5 or newer

ver 5.4.0

27 Jul 17:15
Choose a tag to compare

This release is available in AssetStore on 2016-08-01!/content/17276

Add: Observable.FrameInterval
Add: Observable.FrameTimeInterval
Add: Observable.BatchFrame
Add: Observable.Debug(under UniRx.Diagnostics namespace)
Add: ObservableParticleTrigger and OnParticleCollisionAsObservable, OnParticleTriggerAsObservabl(after Unity 5.4) extension methods
Add: UniRx.AsyncReactiveCommand
Add: ReactiveCommand.BindToOnClick, IObservable<bool>.BindToButtonOnClick
Add: UniRx.Toolkit.ObjectPool, AsyncObjectPool
Add: UniRx.AsyncMessageBroker, asynchronous variation of MessageBroker
Add: ObserveEveryValueChanged(IEqualityComparer) overload
Add: Observable.FromCoroutine(Func<CancellationToken, IEnumerator>) overload
Add: ObservableYieldInstruction.IsDone property
Add: IPresenter.ForceInitialize(object argument)
Improvement: Where().Select(), Select().Where() peformance was optimized that combine funcs at internal
Improvement: MicroCoroutine performance was optimized that prevent refresh spike
Improvement: Observable.Return performance was optimized that reduced memory cost
Improvement: Observable.Return(bool) was optimzied perofmrance that allocate zero memory
Improvement: Observable.ReturnUnit was optimzied perofmrance that allocate zero memory
Improvement: Observable.Empty was optimzied perofmrance that allocate zero memory
Improvement: Observable.Never was optimzied perofmrance that allocate zero memory
Improvement: Observable.DelayFrame performance was optimized
Improvement: UnityEqualityComparer.GetDefault peformance was optimized
Improvement: AddTo(gameObject) dispose when ObservableTrigger is not activated
Improvement: AddTo(gameObject/component) performance was optimized by use inner CompositeDisposable of ObservableDestroyTrigger
Improvement: FromCoroutine<T>(Func<IObserver<T>, IEnumerator>) stops coroutine when subscription was disposed
Improvement: ReactiveCollection, ReactiveDictionary implements dispose pattern
Fix: ToYieldInstruction throws exception on MoveNext when reThrowOnError and has error
Fix: ObserveEveryValueChanged publish value immediately(this is degraded from UniRx 5.3)
Fix: Prevent warning on Unity 5.4 at ObservableMonoBehaviour/TypedMonoBehaviour.OnLevelWasLoaded
Fix: Remove indexer.set of IReadOnlyReactiveDictionary
Breaking Changes: Does not guaranty MicroCoroutine action on same frame
Breaking Changes: UniRx.Diagnostics.LogEntry was changed from class to struct for performance improvement