UniVRM/DepthFirstScheduler
ousttrue d43d135c80 Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler'
Co-authored-by: ousttrue <ousttrue@gmail.com>
Co-authored-by: TORISOUP <tori.birdstrike@gmail.com>
Co-authored-by: yutopp <yutopp@gmail.com>
2018-12-28 21:17:47 +09:00
..
Editor Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
Scheduler Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
Editor.meta Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
Functor.cs Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
Functor.cs.meta Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
IEnumeratorExtensions.cs Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
IEnumeratorExtensions.cs.meta Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
LICENSE Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
LICENSE.meta Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
LockQueue.cs Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
LockQueue.cs.meta Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
MainThreadDispatcher.cs Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
MainThreadDispatcher.cs.meta Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
MonitorQueue.cs Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
MonitorQueue.cs.meta Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
README.md Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
README.md.meta Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
Schedulable.cs Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
Schedulable.cs.meta Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
Scheduler.cs Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
Scheduler.cs.meta Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
Scheduler.meta Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
TaskChain.cs Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
TaskChain.cs.meta Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
Unit.cs Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00
Unit.cs.meta Merge commit 'f20f27259c28dbff6697958b8727d39d24f74ce1' as 'DepthFirstScheduler' 2018-12-28 21:17:47 +09:00

DepthFirstScheduler(深さ優先スケジューラー)

Asynchronous task scheduler for Unity-5.6 or later

これは、Unity5.6でTaskが無いことを補完するためのライブラリです。 木構造にタスクを組み立てて深さ優先で消化します。

  • タスクの実行スケジューラー(Unityメインスレッドやスレッドプール)を指定できる

使い方

var schedulable = new Schedulable<Unit>();

schedulable
    .AddTask(Scheduler.ThreadPool, () => // 子供のタスクを追加する
    {
        return glTF_VRM_Material.Parse(ctx.Json);
    })
    .ContinueWith(Scheduler.MainThread, gltfMaterials => // 兄弟のタスクを追加する
    {
        ctx.MaterialImporter = new VRMMaterialImporter(ctx, gltfMaterials);
    })
    .Subscribe(Scheduler.MainThread, onLoaded, onError);
    ;

Schedulable

T型の結果を返すタスク。

AddTask(IScheduler scheduler, Func firstTask)

子供のタスクを追加する。

ToDo: 一つ目の子供に引数を渡す手段が無い

ContinueWith

ContinueWithCoroutine

OnExecute

動的にタスクを追加するためのHook。

中で、

parent.AddTask

することで実行時に子タスクを追加できる。

Subscribe

タスクの実行を開始する。 実行結果を得る。

Scheduler

StepScheduler

Unity

CurrentThreadScheduler

即時

ThreadPoolScheduler

スレッド

ThreadScheduler

スレッド