summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/VRM/VRM/DepthFirstScheduler/README.md
blob: f62408945399c3f2eb3f27acf37018922243e1ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# DepthFirstScheduler(深さ優先スケジューラー)
Asynchronous task scheduler for Unity-5.6 or later

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

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

# 使い方

```cs
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>
T型の結果を返すタスク。

## AddTask(IScheduler scheduler, Func<T> firstTask) 

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

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

## ContinueWith

## ContinueWithCoroutine

## OnExecute

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

中で、

```
parent.AddTask
```

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

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


# Scheduler
## StepScheduler
Unity
## CurrentThreadScheduler
即時
## ThreadPoolScheduler
スレッド
## ThreadScheduler
スレッド