@neuecc neuecc released this Sep 12, 2018 · 5 commits to master since this release

Assets 4

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

@neuecc neuecc released this Aug 19, 2018 · 16 commits to master since this release

Assets 4

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

6.2.1

  • 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

@neuecc neuecc released this Jul 24, 2018 · 71 commits to master since this release

Assets 4
  • 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

@neuecc neuecc released this Jul 21, 2018 · 80 commits to master since this release

Assets 4

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) to UniTask.Delay(int millisecondsDelay)
  • Breaking Changes Promise[T] to UniTaskCompletionSource[T]
  • Breaking Changes IPromise[T] to IAwaiter[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

@neuecc neuecc released this Jul 10, 2018 · 160 commits to master since this release

Assets 4

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>

@neuecc neuecc released this Sep 30, 2016 · 208 commits to master since this release

Assets 4

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

@neuecc neuecc released this Sep 4, 2016 · 228 commits to master since this release

Assets 4

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

@neuecc neuecc released this Jul 27, 2016 · 246 commits to master since this release

Assets 4

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

@neuecc neuecc released this May 11, 2016 · 318 commits to master since this release

Assets 4

This release is available in AssetStore on May13th 2016.
https://www.assetstore.unity3d.com/jp/#!/content/17276

This release introduce MicroCoroutine, it is memory efficient and 10x faster than standard coroutine at run many coroutines.
Some coroutine based operators has been changed to use MicroCoroutine.

Add : ReactiveCommand
Add : MainThreadDispatcher.StartUpdateMicroCoroutine, StartFixedUpdateMicroCoroutine, StartEndOfFrameMicroCoroutine
Add : Scheduler.MainThreadFixedUpdate, MainThreadEndOfFrame
Add : ToYieldInstruction(cancellationToken)
Add : Observer.Create(onNext/onNext, onError/onNext, onCompleted) overload
Add : IReadOnlyReactiveProperty.SkipLatestValueOnSubscribe
Add : Observable.WhenAll overload (IObservable(params IObservable[] sources), this becomes breaking changes)
Add : Observable.FromMicroCoroutine
Add : Observable.AsSingleUnitObservable
Add : Observable.SubscribeWithState
Add : Observable.CreateWithState
Add : Disposable.CreateWithState
Improvement : Use MicroCoroutine on ObserveEveryValueChanged, EveryUpdate, EveryFixedUpdate, EveryEndOfFrame, NextFrame, TimerFrame, IntervalFrame, DelayFrame, SampleFrame, ThrottleFrame, ThrottleFirstFrame, TimeoutFrame
Improvement : Performance improvement for Observable.Range, Repeat when scheduler is Scheduler.Immediate
Improvement : Use Time.unscaledDeltaTime in IgnoreTimeScaleMainThreadScheduler
Fix : ReadOnlyReactiveProperty(source, initialValue) does not publish initial value on subscribe
Fix : IReadOnlyCollection has set indexer
Fix : Ambigious property of IReactiveCollection.Count, Indexer
Fix : Throw invalid error when ObservableWWW.LoadFromCacheOrDownload failed.
Breaking Changes : Added IReadOnlyReactiveProperty.HasValue
Breaking Changes : AsyncConvertsion scheduler to Scheduler.MainThread on WebGL build(WebGL doesn't support ThreadPool)
Other : Update UniRxAnalyzer 1.4.0.1 https://www.nuget.org/packages/UniRxAnalyzer

@neuecc neuecc released this Feb 14, 2016 · 350 commits to master since this release

Assets 4

This release is available in AssetStore on Feb 18th 2016.
https://www.assetstore.unity3d.com/jp/#!/content/17276

This release has been changed root directory under Plugins.

Add : Observable.Pairwise overload(returns Pair[T])
Add : Observable.ContinueWith
Add : Observable.Share
Add : Observable.ZipLatest
Add : Observable.WithLatestFrom
Add : Observable.TakeLast
Add : Observable.GroupBy
Add : IObserver.Synchronize
Add : ISubject.Synchronize
Add : RangeReactivePropertyAttribute
Fix : Subscribe() throw exception on OnError (this is degraded from UniRx 5.0)
Fix : ToAwaitableEnumerator is called callback when canceled
Fix : Wait complete of WWW when called dispose before completed, it's workaround for freeze bug of Android
Breaking Changes : Buffer(windowBoundaries), Buffer(timeSpan, count) should publish value when buffer is empty.
Breaking Changes : UniRx has been moved under Plugins directory for avoid uNET Weaver Error
Breaking Changes : Obsolete Observable.EveryAfterUpdate
Breaking Changes : Obsolete MainThreadDispatchType.AfterUpdate