Releases: neuecc/UniRx
Ver 7.1.0
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 https://circleci.com/gh/neuecc/UniRx
async/await
is separated to https://github.com/Cysharp/UniTask , if error is occured, remove package(clean) and re-import.
Ver 7.0.0
UniRx.Async
is separated to https://github.com/Cysharp/UniTask
Ver 6.2.2
Ver 6.2.0(6.2.1)
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 throwsOperationCanceledException
- 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(useSuppressCancellationThrow
instead) - Internaly Unit test moved to Unity Test Runner
6.2.1
- Improve
Enumerable.Select(async x => { })
returnsIEnumerable<UniTask<T>>
instead ofIEnumerable<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
- 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
UniRx.Async
- 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)
toUniTask.Delay(int millisecondsDelay)
- Breaking Changes
Promise[T]
toUniTaskCompletionSource[T]
- Breaking Changes
IPromise[T]
toIAwaiter[T]
UniRx
- 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
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 ofTask
,Task<T>
andvoid
- There work on custom async method builder in
async/await
(uses C# 7.0 task-like feature) - It no depends
Task
andSynchronizationContext
, 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 asTask.WhenAll
but you can get awaited value by tuple deconsruction syntaxUniTask.WhenAny
, same asTask.WhenAny
but you can get which index winUniTask.ctor(Func<UniTask>)
is like the embededAsyncLazy<T>
Promise<T>
is the lightweight edition ofTaskCompletionSource<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
returnsIReadOnlyReactiveProperty<T>
Removed obsolete components
IEnumerable<T>.AsSafeEnumerable<T>
LazyTask<T>
UniRxSynchronizationContext
MainThreadDispatchType.AfterUpdate
ObservableMonoBehaviour
TypedMonoBehaviour
IPresenter
,PresenterBase
,PresenterBase<T>
ver 5.5.0
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
This release is available in AssetStore on 2016-09-08
https://www.assetstore.unity3d.com/jp/#!/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
This release is available in AssetStore on 2016-08-01
https://www.assetstore.unity3d.com/jp/#!/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