mirror of
https://github.com/Cysharp/UniTask.git
synced 2026-05-17 04:30:13 +00:00
Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7d21a75ea8 | ||
|
|
88817b7093 | ||
|
|
52cdadc035 | ||
|
|
5401b9b227 | ||
|
|
38de930f81 | ||
|
|
9be6ef7ba6 | ||
|
|
739bc6e26c | ||
|
|
71879266ac | ||
|
|
5ced0a1d4b | ||
|
|
908e361985 | ||
|
|
797affae4d | ||
|
|
ae3b825e29 | ||
|
|
143d97a73b | ||
|
|
90631c54b1 | ||
|
|
478e2998a8 | ||
|
|
9406305b2e | ||
|
|
1c26c81b20 | ||
|
|
a455de88b0 | ||
|
|
fba6942d5f | ||
|
|
3115efb672 | ||
|
|
fd70c031cb |
24
.github/workflows/stale.yml
vendored
Normal file
24
.github/workflows/stale.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
name: "Close stale issues"
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "0 0 * * *"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/stale@v3
|
||||||
|
with:
|
||||||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
# enable issue
|
||||||
|
stale-issue-message: "This issue is stale because it has been open 90 days with no activity. Remove stale label or comment or this will be closed in 7 days."
|
||||||
|
stale-issue-label: "stale"
|
||||||
|
# enable pr
|
||||||
|
stale-pr-message: "This PR is stale because it has been open 90 days with no activity. Remove stale label or comment or this will be closed in 7 days."
|
||||||
|
stale-pr-label: "stale"
|
||||||
|
days-before-stale: 90
|
||||||
|
days-before-close: 7
|
||||||
|
exempt-issue-labels: "wip"
|
||||||
|
exempt-pr-labels: "wip"
|
||||||
|
remove-stale-when-updated: true
|
||||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -255,3 +255,7 @@ src/UniTask/DOTween.Modules.Player.csproj
|
|||||||
src/UniTask/Assembly-CSharp.Player.csproj
|
src/UniTask/Assembly-CSharp.Player.csproj
|
||||||
|
|
||||||
src/UniTask/Unity.EditorCoroutines.Editor.csproj
|
src/UniTask/Unity.EditorCoroutines.Editor.csproj
|
||||||
|
|
||||||
|
src/UniTask/.vsconfig
|
||||||
|
|
||||||
|
src/UniTask/Logs/ApiUpdaterCheck.txt
|
||||||
|
|||||||
11
README.md
11
README.md
@@ -346,6 +346,11 @@ public enum PlayerLoopTiming
|
|||||||
|
|
||||||
PostLateUpdate = 12,
|
PostLateUpdate = 12,
|
||||||
LastPostLateUpdate = 13
|
LastPostLateUpdate = 13
|
||||||
|
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
TimeUpdate = 14,
|
||||||
|
LastTimeUpdate = 15,
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -501,10 +506,10 @@ DOTween support's default behaviour(`await`, `WithCancellation`, `ToUniTask`) aw
|
|||||||
|
|
||||||
AsyncEnumerable and Async LINQ
|
AsyncEnumerable and Async LINQ
|
||||||
---
|
---
|
||||||
Unity 2020.2.0a12 supports C# 8.0 so you can use `await foreach`. This is the new Update notation in async era.
|
Unity 2020.2 supports C# 8.0 so you can use `await foreach`. This is the new Update notation in async era.
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
// Unity 2020.2.0a12, C# 8.0
|
// Unity 2020.2, C# 8.0
|
||||||
await foreach (var _ in UniTaskAsyncEnumerable.EveryUpdate(token))
|
await foreach (var _ in UniTaskAsyncEnumerable.EveryUpdate(token))
|
||||||
{
|
{
|
||||||
Debug.Log("Update() " + Time.frameCount);
|
Debug.Log("Update() " + Time.frameCount);
|
||||||
@@ -912,7 +917,7 @@ After Unity 2019.3.4f1, Unity 2020.1a21, that support path query parameter of gi
|
|||||||
|
|
||||||
or add `"com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask"` to `Packages/manifest.json`.
|
or add `"com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask"` to `Packages/manifest.json`.
|
||||||
|
|
||||||
If you want to set a target version, UniTask is using `*.*.*` release tag so you can specify a version like `#2.0.36`. For example `https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#2.0.36`.
|
If you want to set a target version, UniTask is using `*.*.*` release tag so you can specify a version like `#2.1.0`. For example `https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#2.1.0`.
|
||||||
|
|
||||||
### Install via OpenUPM
|
### Install via OpenUPM
|
||||||
|
|
||||||
|
|||||||
@@ -87,11 +87,14 @@ namespace Cysharp.Threading.Tasks
|
|||||||
result.calledGetResult = false;
|
result.calledGetResult = false;
|
||||||
result.initialFrame = -1;
|
result.initialFrame = -1;
|
||||||
|
|
||||||
PlayerLoopHelper.AddAction(timing, result);
|
|
||||||
|
|
||||||
token = result.core.Version;
|
token = result.core.Version;
|
||||||
|
|
||||||
result.MoveNext(); // run immediately.
|
// run immediately.
|
||||||
|
if (result.MoveNext())
|
||||||
|
{
|
||||||
|
PlayerLoopHelper.AddAction(timing, result);
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,6 +188,7 @@ namespace Cysharp.Threading.Tasks
|
|||||||
core.Reset();
|
core.Reset();
|
||||||
innerEnumerator = default;
|
innerEnumerator = default;
|
||||||
cancellationToken = default;
|
cancellationToken = default;
|
||||||
|
|
||||||
return pool.TryPush(this);
|
return pool.TryPush(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,7 +247,7 @@ namespace Cysharp.Threading.Tasks
|
|||||||
{
|
{
|
||||||
goto WARN;
|
goto WARN;
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
WARN:
|
WARN:
|
||||||
|
|||||||
@@ -132,6 +132,14 @@ namespace Cysharp.Threading.Tasks.Internal
|
|||||||
case PlayerLoopTiming.LastPostLateUpdate:
|
case PlayerLoopTiming.LastPostLateUpdate:
|
||||||
LastPostLateUpdate();
|
LastPostLateUpdate();
|
||||||
break;
|
break;
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
case PlayerLoopTiming.TimeUpdate:
|
||||||
|
TimeUpdate();
|
||||||
|
break;
|
||||||
|
case PlayerLoopTiming.LastTimeUpdate:
|
||||||
|
LastTimeUpdate();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -154,6 +162,10 @@ namespace Cysharp.Threading.Tasks.Internal
|
|||||||
void LastPreLateUpdate() => RunCore();
|
void LastPreLateUpdate() => RunCore();
|
||||||
void PostLateUpdate() => RunCore();
|
void PostLateUpdate() => RunCore();
|
||||||
void LastPostLateUpdate() => RunCore();
|
void LastPostLateUpdate() => RunCore();
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
void TimeUpdate() => RunCore();
|
||||||
|
void LastTimeUpdate() => RunCore();
|
||||||
|
#endif
|
||||||
|
|
||||||
[System.Diagnostics.DebuggerHidden]
|
[System.Diagnostics.DebuggerHidden]
|
||||||
void RunCore()
|
void RunCore()
|
||||||
|
|||||||
@@ -118,6 +118,14 @@ namespace Cysharp.Threading.Tasks.Internal
|
|||||||
case PlayerLoopTiming.LastPostLateUpdate:
|
case PlayerLoopTiming.LastPostLateUpdate:
|
||||||
LastPostLateUpdate();
|
LastPostLateUpdate();
|
||||||
break;
|
break;
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
case PlayerLoopTiming.TimeUpdate:
|
||||||
|
TimeUpdate();
|
||||||
|
break;
|
||||||
|
case PlayerLoopTiming.LastTimeUpdate:
|
||||||
|
LastTimeUpdate();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -140,6 +148,10 @@ namespace Cysharp.Threading.Tasks.Internal
|
|||||||
void LastPreLateUpdate() => RunCore();
|
void LastPreLateUpdate() => RunCore();
|
||||||
void PostLateUpdate() => RunCore();
|
void PostLateUpdate() => RunCore();
|
||||||
void LastPostLateUpdate() => RunCore();
|
void LastPostLateUpdate() => RunCore();
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
void TimeUpdate() => RunCore();
|
||||||
|
void LastTimeUpdate() => RunCore();
|
||||||
|
#endif
|
||||||
|
|
||||||
[System.Diagnostics.DebuggerHidden]
|
[System.Diagnostics.DebuggerHidden]
|
||||||
void RunCore()
|
void RunCore()
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ namespace Cysharp.Threading.Tasks.Internal
|
|||||||
|
|
||||||
public TimeSpan Elapsed => TimeSpan.FromTicks(this.ElapsedTicks);
|
public TimeSpan Elapsed => TimeSpan.FromTicks(this.ElapsedTicks);
|
||||||
|
|
||||||
|
public bool IsInvalid => startTimestamp == 0;
|
||||||
|
|
||||||
public long ElapsedTicks
|
public long ElapsedTicks
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
|||||||
@@ -8,8 +8,10 @@ using System.Threading;
|
|||||||
|
|
||||||
#if UNITY_2019_3_OR_NEWER
|
#if UNITY_2019_3_OR_NEWER
|
||||||
using UnityEngine.LowLevel;
|
using UnityEngine.LowLevel;
|
||||||
|
using PlayerLoopType = UnityEngine.PlayerLoop;
|
||||||
#else
|
#else
|
||||||
using UnityEngine.Experimental.LowLevel;
|
using UnityEngine.Experimental.LowLevel;
|
||||||
|
using PlayerLoopType = UnityEngine.Experimental.PlayerLoop;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
@@ -57,6 +59,13 @@ namespace Cysharp.Threading.Tasks
|
|||||||
public struct UniTaskLoopRunnerLastYieldUpdate { };
|
public struct UniTaskLoopRunnerLastYieldUpdate { };
|
||||||
public struct UniTaskLoopRunnerLastYieldPreLateUpdate { };
|
public struct UniTaskLoopRunnerLastYieldPreLateUpdate { };
|
||||||
public struct UniTaskLoopRunnerLastYieldPostLateUpdate { };
|
public struct UniTaskLoopRunnerLastYieldPostLateUpdate { };
|
||||||
|
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
public struct UniTaskLoopRunnerTimeUpdate { };
|
||||||
|
public struct UniTaskLoopRunnerLastTimeUpdate { };
|
||||||
|
public struct UniTaskLoopRunnerYieldTimeUpdate { };
|
||||||
|
public struct UniTaskLoopRunnerLastYieldTimeUpdate { };
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum PlayerLoopTiming
|
public enum PlayerLoopTiming
|
||||||
@@ -80,7 +89,13 @@ namespace Cysharp.Threading.Tasks
|
|||||||
LastPreLateUpdate = 11,
|
LastPreLateUpdate = 11,
|
||||||
|
|
||||||
PostLateUpdate = 12,
|
PostLateUpdate = 12,
|
||||||
LastPostLateUpdate = 13
|
LastPostLateUpdate = 13,
|
||||||
|
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
// Unity 2020.2 added TimeUpdate https://docs.unity3d.com/2020.2/Documentation/ScriptReference/PlayerLoop.TimeUpdate.html
|
||||||
|
TimeUpdate = 14,
|
||||||
|
LastTimeUpdate = 15,
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IPlayerLoopItem
|
public interface IPlayerLoopItem
|
||||||
@@ -101,7 +116,7 @@ namespace Cysharp.Threading.Tasks
|
|||||||
static SynchronizationContext unitySynchronizationContetext;
|
static SynchronizationContext unitySynchronizationContetext;
|
||||||
static ContinuationQueue[] yielders;
|
static ContinuationQueue[] yielders;
|
||||||
static PlayerLoopRunner[] runners;
|
static PlayerLoopRunner[] runners;
|
||||||
|
internal static bool IsEditorApplicationQuitting { get; private set; }
|
||||||
static PlayerLoopSystem[] InsertRunner(PlayerLoopSystem loopSystem,
|
static PlayerLoopSystem[] InsertRunner(PlayerLoopSystem loopSystem,
|
||||||
Type loopRunnerYieldType, ContinuationQueue cq, Type lastLoopRunnerYieldType, ContinuationQueue lastCq,
|
Type loopRunnerYieldType, ContinuationQueue cq, Type lastLoopRunnerYieldType, ContinuationQueue lastCq,
|
||||||
Type loopRunnerType, PlayerLoopRunner runner, Type lastLoopRunnerType, PlayerLoopRunner lastRunner)
|
Type loopRunnerType, PlayerLoopRunner runner, Type lastLoopRunnerType, PlayerLoopRunner lastRunner)
|
||||||
@@ -112,6 +127,7 @@ namespace Cysharp.Threading.Tasks
|
|||||||
{
|
{
|
||||||
if (state == PlayModeStateChange.EnteredEditMode || state == PlayModeStateChange.ExitingEditMode)
|
if (state == PlayModeStateChange.EnteredEditMode || state == PlayModeStateChange.ExitingEditMode)
|
||||||
{
|
{
|
||||||
|
IsEditorApplicationQuitting = true;
|
||||||
// run rest action before clear.
|
// run rest action before clear.
|
||||||
if (runner != null)
|
if (runner != null)
|
||||||
{
|
{
|
||||||
@@ -134,6 +150,7 @@ namespace Cysharp.Threading.Tasks
|
|||||||
lastCq.Run();
|
lastCq.Run();
|
||||||
lastCq.Clear();
|
lastCq.Clear();
|
||||||
}
|
}
|
||||||
|
IsEditorApplicationQuitting = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
@@ -281,51 +298,84 @@ namespace Cysharp.Threading.Tasks
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
private static int FindLoopSystemIndex(PlayerLoopSystem[] playerLoopList, Type systemType)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < playerLoopList.Length; i++)
|
||||||
|
{
|
||||||
|
if (playerLoopList[i].type == systemType)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Exception("Target PlayerLoopSystem does not found. Type:" + systemType.FullName);
|
||||||
|
}
|
||||||
|
|
||||||
public static void Initialize(ref PlayerLoopSystem playerLoop)
|
public static void Initialize(ref PlayerLoopSystem playerLoop)
|
||||||
{
|
{
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
yielders = new ContinuationQueue[16];
|
||||||
|
runners = new PlayerLoopRunner[16];
|
||||||
|
#else
|
||||||
yielders = new ContinuationQueue[14];
|
yielders = new ContinuationQueue[14];
|
||||||
runners = new PlayerLoopRunner[14];
|
runners = new PlayerLoopRunner[14];
|
||||||
|
#endif
|
||||||
|
|
||||||
var copyList = playerLoop.subSystemList.ToArray();
|
var copyList = playerLoop.subSystemList.ToArray();
|
||||||
|
|
||||||
// Initialization
|
var i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.Initialization));
|
||||||
copyList[0].subSystemList = InsertRunner(copyList[0], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldInitialization), yielders[0] = new ContinuationQueue(PlayerLoopTiming.Initialization),
|
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldInitialization), yielders[0] = new ContinuationQueue(PlayerLoopTiming.Initialization),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldInitialization), yielders[1] = new ContinuationQueue(PlayerLoopTiming.LastInitialization),
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldInitialization), yielders[1] = new ContinuationQueue(PlayerLoopTiming.LastInitialization),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerInitialization), runners[0] = new PlayerLoopRunner(PlayerLoopTiming.Initialization),
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerInitialization), runners[0] = new PlayerLoopRunner(PlayerLoopTiming.Initialization),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastInitialization), runners[1] = new PlayerLoopRunner(PlayerLoopTiming.LastInitialization));
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastInitialization), runners[1] = new PlayerLoopRunner(PlayerLoopTiming.LastInitialization));
|
||||||
// EarlyUpdate
|
// EarlyUpdate
|
||||||
copyList[1].subSystemList = InsertRunner(copyList[1], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldEarlyUpdate), yielders[2] = new ContinuationQueue(PlayerLoopTiming.EarlyUpdate),
|
i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.EarlyUpdate));
|
||||||
|
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldEarlyUpdate), yielders[2] = new ContinuationQueue(PlayerLoopTiming.EarlyUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldEarlyUpdate), yielders[3] = new ContinuationQueue(PlayerLoopTiming.LastEarlyUpdate),
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldEarlyUpdate), yielders[3] = new ContinuationQueue(PlayerLoopTiming.LastEarlyUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerEarlyUpdate), runners[2] = new PlayerLoopRunner(PlayerLoopTiming.EarlyUpdate),
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerEarlyUpdate), runners[2] = new PlayerLoopRunner(PlayerLoopTiming.EarlyUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastEarlyUpdate), runners[3] = new PlayerLoopRunner(PlayerLoopTiming.LastEarlyUpdate));
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastEarlyUpdate), runners[3] = new PlayerLoopRunner(PlayerLoopTiming.LastEarlyUpdate));
|
||||||
// FixedUpdate
|
// FixedUpdate
|
||||||
copyList[2].subSystemList = InsertRunner(copyList[2], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldFixedUpdate), yielders[4] = new ContinuationQueue(PlayerLoopTiming.FixedUpdate),
|
i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.FixedUpdate));
|
||||||
|
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldFixedUpdate), yielders[4] = new ContinuationQueue(PlayerLoopTiming.FixedUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldFixedUpdate), yielders[5] = new ContinuationQueue(PlayerLoopTiming.LastFixedUpdate),
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldFixedUpdate), yielders[5] = new ContinuationQueue(PlayerLoopTiming.LastFixedUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerFixedUpdate), runners[4] = new PlayerLoopRunner(PlayerLoopTiming.FixedUpdate),
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerFixedUpdate), runners[4] = new PlayerLoopRunner(PlayerLoopTiming.FixedUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastFixedUpdate), runners[5] = new PlayerLoopRunner(PlayerLoopTiming.LastFixedUpdate));
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastFixedUpdate), runners[5] = new PlayerLoopRunner(PlayerLoopTiming.LastFixedUpdate));
|
||||||
// PreUpdate
|
// PreUpdate
|
||||||
copyList[3].subSystemList = InsertRunner(copyList[3], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldPreUpdate), yielders[6] = new ContinuationQueue(PlayerLoopTiming.PreUpdate),
|
i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.PreUpdate));
|
||||||
|
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldPreUpdate), yielders[6] = new ContinuationQueue(PlayerLoopTiming.PreUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldPreUpdate), yielders[7] = new ContinuationQueue(PlayerLoopTiming.LastPreUpdate),
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldPreUpdate), yielders[7] = new ContinuationQueue(PlayerLoopTiming.LastPreUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerPreUpdate), runners[6] = new PlayerLoopRunner(PlayerLoopTiming.PreUpdate),
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerPreUpdate), runners[6] = new PlayerLoopRunner(PlayerLoopTiming.PreUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastPreUpdate), runners[7] = new PlayerLoopRunner(PlayerLoopTiming.LastPreUpdate));
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastPreUpdate), runners[7] = new PlayerLoopRunner(PlayerLoopTiming.LastPreUpdate));
|
||||||
// Update
|
// Update
|
||||||
copyList[4].subSystemList = InsertRunner(copyList[4], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldUpdate), yielders[8] = new ContinuationQueue(PlayerLoopTiming.Update),
|
i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.Update));
|
||||||
|
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldUpdate), yielders[8] = new ContinuationQueue(PlayerLoopTiming.Update),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldUpdate), yielders[9] = new ContinuationQueue(PlayerLoopTiming.LastUpdate),
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldUpdate), yielders[9] = new ContinuationQueue(PlayerLoopTiming.LastUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerUpdate), runners[8] = new PlayerLoopRunner(PlayerLoopTiming.Update),
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerUpdate), runners[8] = new PlayerLoopRunner(PlayerLoopTiming.Update),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastUpdate), runners[9] = new PlayerLoopRunner(PlayerLoopTiming.LastUpdate));
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastUpdate), runners[9] = new PlayerLoopRunner(PlayerLoopTiming.LastUpdate));
|
||||||
// PreLateUpdate
|
// PreLateUpdate
|
||||||
copyList[5].subSystemList = InsertRunner(copyList[5], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldPreLateUpdate), yielders[10] = new ContinuationQueue(PlayerLoopTiming.PreLateUpdate),
|
i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.PreLateUpdate));
|
||||||
|
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldPreLateUpdate), yielders[10] = new ContinuationQueue(PlayerLoopTiming.PreLateUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldPreLateUpdate), yielders[11] = new ContinuationQueue(PlayerLoopTiming.LastPreLateUpdate),
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldPreLateUpdate), yielders[11] = new ContinuationQueue(PlayerLoopTiming.LastPreLateUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerPreLateUpdate), runners[10] = new PlayerLoopRunner(PlayerLoopTiming.PreLateUpdate),
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerPreLateUpdate), runners[10] = new PlayerLoopRunner(PlayerLoopTiming.PreLateUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastPreLateUpdate), runners[11] = new PlayerLoopRunner(PlayerLoopTiming.LastPreLateUpdate));
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastPreLateUpdate), runners[11] = new PlayerLoopRunner(PlayerLoopTiming.LastPreLateUpdate));
|
||||||
// PostLateUpdate
|
// PostLateUpdate
|
||||||
copyList[6].subSystemList = InsertRunner(copyList[6], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldPostLateUpdate), yielders[12] = new ContinuationQueue(PlayerLoopTiming.PostLateUpdate),
|
i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.PostLateUpdate));
|
||||||
|
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldPostLateUpdate), yielders[12] = new ContinuationQueue(PlayerLoopTiming.PostLateUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldPostLateUpdate), yielders[13] = new ContinuationQueue(PlayerLoopTiming.LastPostLateUpdate),
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldPostLateUpdate), yielders[13] = new ContinuationQueue(PlayerLoopTiming.LastPostLateUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerPostLateUpdate), runners[12] = new PlayerLoopRunner(PlayerLoopTiming.PostLateUpdate),
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerPostLateUpdate), runners[12] = new PlayerLoopRunner(PlayerLoopTiming.PostLateUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastPostLateUpdate), runners[13] = new PlayerLoopRunner(PlayerLoopTiming.LastPostLateUpdate));
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastPostLateUpdate), runners[13] = new PlayerLoopRunner(PlayerLoopTiming.LastPostLateUpdate));
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
// TimeUpdate
|
||||||
|
i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.TimeUpdate));
|
||||||
|
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldTimeUpdate), yielders[14] = new ContinuationQueue(PlayerLoopTiming.TimeUpdate),
|
||||||
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldTimeUpdate), yielders[15] = new ContinuationQueue(PlayerLoopTiming.LastTimeUpdate),
|
||||||
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerTimeUpdate), runners[14] = new PlayerLoopRunner(PlayerLoopTiming.TimeUpdate),
|
||||||
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastTimeUpdate), runners[15] = new PlayerLoopRunner(PlayerLoopTiming.LastTimeUpdate));
|
||||||
|
#endif
|
||||||
|
|
||||||
// Insert UniTaskSynchronizationContext to Update loop
|
// Insert UniTaskSynchronizationContext to Update loop
|
||||||
copyList[4].subSystemList = InsertUniTaskSynchronizationContext(copyList[4]);
|
i = FindLoopSystemIndex(copyList, typeof(PlayerLoopType.Update));
|
||||||
|
copyList[i].subSystemList = InsertUniTaskSynchronizationContext(copyList[i]);
|
||||||
|
|
||||||
playerLoop.subSystemList = copyList;
|
playerLoop.subSystemList = copyList;
|
||||||
PlayerLoop.SetPlayerLoop(playerLoop);
|
PlayerLoop.SetPlayerLoop(playerLoop);
|
||||||
|
|||||||
@@ -726,6 +726,12 @@ namespace Cysharp.Threading.Tasks
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (stopwatch.IsInvalid)
|
||||||
|
{
|
||||||
|
core.TrySetResult(AsyncUnit.Default);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (stopwatch.ElapsedTicks >= delayTimeSpanTicks)
|
if (stopwatch.ElapsedTicks >= delayTimeSpanTicks)
|
||||||
{
|
{
|
||||||
core.TrySetResult(AsyncUnit.Default);
|
core.TrySetResult(AsyncUnit.Default);
|
||||||
|
|||||||
@@ -341,10 +341,12 @@ namespace Cysharp.Threading.Tasks
|
|||||||
public UniTaskStatus GetStatus(short token)
|
public UniTaskStatus GetStatus(short token)
|
||||||
{
|
{
|
||||||
var f = Interlocked.Exchange(ref factory, null);
|
var f = Interlocked.Exchange(ref factory, null);
|
||||||
if (f == null) throw new InvalidOperationException("Can't call twice.");
|
if (f != null)
|
||||||
|
{
|
||||||
|
task = f();
|
||||||
|
awaiter = task.GetAwaiter();
|
||||||
|
}
|
||||||
|
|
||||||
task = f();
|
|
||||||
awaiter = task.GetAwaiter();
|
|
||||||
return task.Status;
|
return task.Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -383,10 +385,12 @@ namespace Cysharp.Threading.Tasks
|
|||||||
public UniTaskStatus GetStatus(short token)
|
public UniTaskStatus GetStatus(short token)
|
||||||
{
|
{
|
||||||
var f = Interlocked.Exchange(ref factory, null);
|
var f = Interlocked.Exchange(ref factory, null);
|
||||||
if (f == null) throw new InvalidOperationException("Can't call twice.");
|
if (f != null)
|
||||||
|
{
|
||||||
|
task = f();
|
||||||
|
awaiter = task.GetAwaiter();
|
||||||
|
}
|
||||||
|
|
||||||
task = f();
|
|
||||||
awaiter = task.GetAwaiter();
|
|
||||||
return task.Status;
|
return task.Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -115,8 +115,13 @@ namespace Cysharp.Threading.Tasks
|
|||||||
var status = this.source.GetStatus(this.token);
|
var status = this.source.GetStatus(this.token);
|
||||||
if (status.IsCompletedSuccessfully())
|
if (status.IsCompletedSuccessfully())
|
||||||
{
|
{
|
||||||
|
this.source.GetResult(this.token);
|
||||||
return CompletedTasks.AsyncUnit;
|
return CompletedTasks.AsyncUnit;
|
||||||
}
|
}
|
||||||
|
else if(this.source is IUniTaskSource<AsyncUnit> asyncUnitSource)
|
||||||
|
{
|
||||||
|
return new UniTask<AsyncUnit>(asyncUnitSource, this.token);
|
||||||
|
}
|
||||||
|
|
||||||
return new UniTask<AsyncUnit>(new AsyncUnitSource(this.source), this.token);
|
return new UniTask<AsyncUnit>(new AsyncUnitSource(this.source), this.token);
|
||||||
}
|
}
|
||||||
@@ -422,6 +427,7 @@ namespace Cysharp.Threading.Tasks
|
|||||||
var status = this.source.GetStatus(this.token);
|
var status = this.source.GetStatus(this.token);
|
||||||
if (status.IsCompletedSuccessfully())
|
if (status.IsCompletedSuccessfully())
|
||||||
{
|
{
|
||||||
|
this.source.GetResult(this.token);
|
||||||
return UniTask.CompletedTask;
|
return UniTask.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Unity.Jobs;
|
using Unity.Jobs;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
namespace Cysharp.Threading.Tasks
|
namespace Cysharp.Threading.Tasks
|
||||||
{
|
{
|
||||||
@@ -85,7 +86,7 @@ namespace Cysharp.Threading.Tasks
|
|||||||
|
|
||||||
public bool MoveNext()
|
public bool MoveNext()
|
||||||
{
|
{
|
||||||
if (jobHandle.IsCompleted)
|
if (jobHandle.IsCompleted | PlayerLoopHelper.IsEditorApplicationQuitting)
|
||||||
{
|
{
|
||||||
jobHandle.Complete();
|
jobHandle.Complete();
|
||||||
core.TrySetResult(AsyncUnit.Default);
|
core.TrySetResult(AsyncUnit.Default);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#if ENABLE_UNITYWEBREQUEST
|
#if ENABLE_UNITYWEBREQUEST
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using UnityEngine.Networking;
|
using UnityEngine.Networking;
|
||||||
|
|
||||||
namespace Cysharp.Threading.Tasks
|
namespace Cysharp.Threading.Tasks
|
||||||
@@ -17,6 +18,7 @@ namespace Cysharp.Threading.Tasks
|
|||||||
public string Error { get; }
|
public string Error { get; }
|
||||||
public string Text { get; }
|
public string Text { get; }
|
||||||
public long ResponseCode { get; }
|
public long ResponseCode { get; }
|
||||||
|
public Dictionary<string, string> ResponseHeaders { get; }
|
||||||
|
|
||||||
string msg;
|
string msg;
|
||||||
|
|
||||||
@@ -38,6 +40,7 @@ namespace Cysharp.Threading.Tasks
|
|||||||
this.Text = dhb.text;
|
this.Text = dhb.text;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
this.ResponseHeaders = unityWebRequest.GetResponseHeaders();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Message
|
public override string Message
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "com.cysharp.unitask",
|
"name": "com.cysharp.unitask",
|
||||||
"displayName": "UniTask",
|
"displayName": "UniTask",
|
||||||
"version": "2.0.37",
|
"version": "2.1.1",
|
||||||
"unity": "2018.4",
|
"unity": "2018.4",
|
||||||
"description": "Provides an efficient async/await integration to Unity.",
|
"description": "Provides an efficient async/await integration to Unity.",
|
||||||
"keywords": [ "async/await", "async", "Task", "UniTask" ],
|
"keywords": [ "async/await", "async", "Task", "UniTask" ],
|
||||||
|
|||||||
41
src/UniTask/Assets/Scenes/EditorTest1.cs
Normal file
41
src/UniTask/Assets/Scenes/EditorTest1.cs
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
#if UNITY_EDITOR
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Cysharp.Threading.Tasks;
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
public class Test1
|
||||||
|
{
|
||||||
|
[MenuItem("Test/Test1")]
|
||||||
|
public static async UniTaskVoid TestFunc()
|
||||||
|
{
|
||||||
|
await DoSomeThing();
|
||||||
|
string[] scenes = new string[]
|
||||||
|
{
|
||||||
|
"Assets/Scenes/SandboxMain.unity",
|
||||||
|
};
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Debug.Log("Build Begin");
|
||||||
|
BuildPipeline.BuildPlayer(scenes, Application.dataPath + "../target", BuildTarget.StandaloneWindows, BuildOptions.CompressWithLz4);
|
||||||
|
Debug.Log("Build After");
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.LogError(e.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async UniTask DoSomeThing()
|
||||||
|
{
|
||||||
|
Debug.Log("Dosomething");
|
||||||
|
await UniTask.Delay(1500, DelayType.Realtime);
|
||||||
|
Debug.Log("Dosomething 2");
|
||||||
|
await UniTask.Delay(1000, DelayType.Realtime);
|
||||||
|
Debug.Log("Dosomething 3");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
11
src/UniTask/Assets/Scenes/EditorTest1.cs.meta
Normal file
11
src/UniTask/Assets/Scenes/EditorTest1.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 48003021292963e48b2493e915dca5ac
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -145,50 +145,50 @@ namespace Cysharp.Threading.Tasks.Sample
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class LoggingDecorator : IAsyncDecorator
|
//public class LoggingDecorator : IAsyncDecorator
|
||||||
{
|
//{
|
||||||
public async UniTask<ResponseContext> SendAsync(RequestContext context, CancellationToken cancellationToken, Func<RequestContext, CancellationToken, UniTask<ResponseContext>> next)
|
// public async UniTask<ResponseContext> SendAsync(RequestContext context, CancellationToken cancellationToken, Func<RequestContext, CancellationToken, UniTask<ResponseContext>> next)
|
||||||
{
|
// {
|
||||||
var sw = Stopwatch.StartNew();
|
// var sw = Stopwatch.StartNew();
|
||||||
try
|
// try
|
||||||
{
|
// {
|
||||||
UnityEngine.Debug.Log("Start Network Request:" + context.Path);
|
// UnityEngine.Debug.Log("Start Network Request:" + context.Path);
|
||||||
|
|
||||||
var response = await next(context, cancellationToken);
|
// var response = await next(context, cancellationToken);
|
||||||
|
|
||||||
UnityEngine.Debug.Log($"Complete Network Request: {context.Path} , Elapsed: {sw.Elapsed}, Size: {response.GetRawData().Length}");
|
// UnityEngine.Debug.Log($"Complete Network Request: {context.Path} , Elapsed: {sw.Elapsed}, Size: {response.GetRawData().Length}");
|
||||||
|
|
||||||
return response;
|
// return response;
|
||||||
}
|
// }
|
||||||
catch (Exception ex)
|
// catch (Exception ex)
|
||||||
{
|
// {
|
||||||
if (ex is OperationCanceledException)
|
// if (ex is OperationCanceledException)
|
||||||
{
|
// {
|
||||||
UnityEngine.Debug.Log("Request Canceled:" + context.Path);
|
// UnityEngine.Debug.Log("Request Canceled:" + context.Path);
|
||||||
}
|
// }
|
||||||
else if (ex is TimeoutException)
|
// else if (ex is TimeoutException)
|
||||||
{
|
// {
|
||||||
UnityEngine.Debug.Log("Request Timeout:" + context.Path);
|
// UnityEngine.Debug.Log("Request Timeout:" + context.Path);
|
||||||
}
|
// }
|
||||||
else if (ex is UnityWebRequestException webex)
|
// else if (ex is UnityWebRequestException webex)
|
||||||
{
|
// {
|
||||||
if (webex.IsHttpError)
|
// if (webex.IsHttpError)
|
||||||
{
|
// {
|
||||||
UnityEngine.Debug.Log($"Request HttpError: {context.Path} Code:{webex.ResponseCode} Message:{webex.Message}");
|
// UnityEngine.Debug.Log($"Request HttpError: {context.Path} Code:{webex.ResponseCode} Message:{webex.Message}");
|
||||||
}
|
// }
|
||||||
else if (webex.IsNetworkError)
|
// else if (webex.IsNetworkError)
|
||||||
{
|
// {
|
||||||
UnityEngine.Debug.Log($"Request NetworkError: {context.Path} Code:{webex.ResponseCode} Message:{webex.Message}");
|
// UnityEngine.Debug.Log($"Request NetworkError: {context.Path} Code:{webex.ResponseCode} Message:{webex.Message}");
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
throw;
|
// throw;
|
||||||
}
|
// }
|
||||||
finally
|
// finally
|
||||||
{
|
// {
|
||||||
/* log other */
|
// /* log other */
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
public class SetupHeaderDecorator : IAsyncDecorator
|
public class SetupHeaderDecorator : IAsyncDecorator
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -428,15 +428,15 @@ public class SandboxMain : MonoBehaviour
|
|||||||
Debug.Log("after");
|
Debug.Log("after");
|
||||||
}
|
}
|
||||||
|
|
||||||
private async UniTaskVoid ExecuteAsync()
|
//private async UniTaskVoid ExecuteAsync()
|
||||||
{
|
//{
|
||||||
var req = UnityWebRequest.Get("https://google.com/");
|
// var req = UnityWebRequest.Get("https://google.com/");
|
||||||
|
|
||||||
var v = await req.SendWebRequest().ToUniTask();
|
// var v = await req.SendWebRequest().ToUniTask();
|
||||||
// req.Dispose();
|
// // req.Dispose();
|
||||||
Debug.Log($"{v.isDone} {v.isHttpError} {v.isNetworkError}");
|
// Debug.Log($"{v.isDone} {v.isHttpError} {v.isNetworkError}");
|
||||||
Debug.Log(v.downloadHandler.text);
|
// Debug.Log(v.downloadHandler.text);
|
||||||
}
|
//}
|
||||||
private async void Go()
|
private async void Go()
|
||||||
{
|
{
|
||||||
await UniTask.DelayFrame(0);
|
await UniTask.DelayFrame(0);
|
||||||
@@ -516,260 +516,50 @@ public class SandboxMain : MonoBehaviour
|
|||||||
Debug.Log("end cor");
|
Debug.Log("end cor");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IEnumerator LastYieldCore()
|
||||||
|
{
|
||||||
|
Debug.Log("YieldBegin:" + Time.frameCount);
|
||||||
|
yield return new WaitForEndOfFrame();
|
||||||
|
Debug.Log("YieldEnd:" + Time.frameCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async UniTask TestAsync(CancellationToken ct)
|
||||||
|
{
|
||||||
|
Debug.Log("TestAsync Start.");
|
||||||
|
var count = 0;
|
||||||
|
while (!ct.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Debug.Log($"TestAsync try count:{++count}");
|
||||||
|
var task1 = new WaitUntil(() => UnityEngine.Random.Range(0, 10) == 0).ToUniTask();
|
||||||
|
var task2 = new WaitUntil(() => UnityEngine.Random.Range(0, 10) == 0).ToUniTask();
|
||||||
|
var task3 = new WaitUntil(() => UnityEngine.Random.Range(0, 10) == 0).ToUniTask();
|
||||||
|
|
||||||
|
await UniTask.WhenAny(task1, task2, task3);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.LogError(e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Debug.Log("TestAsync Finished.");
|
||||||
|
}
|
||||||
|
|
||||||
async UniTaskVoid Start()
|
async UniTaskVoid Start()
|
||||||
{
|
{
|
||||||
await TestCor().ToUniTask(this);
|
var cts = new CancellationTokenSource();
|
||||||
|
|
||||||
Debug.Log("App Start");
|
|
||||||
|
|
||||||
Application.quitting += () =>
|
|
||||||
{
|
|
||||||
Debug.Log("called quitting");
|
|
||||||
quitSource.Cancel();
|
|
||||||
};
|
|
||||||
|
|
||||||
QuitCheck().Forget();
|
|
||||||
|
|
||||||
//Expression.Lambda<Func<int>>(null).Compile(true);
|
|
||||||
|
|
||||||
//RunStandardTaskAsync();
|
|
||||||
|
|
||||||
//UnityEngine.Debug.Log("UniTaskPlayerLoop ready? " + PlayerLoopHelper.IsInjectedUniTaskPlayerLoop());
|
|
||||||
|
|
||||||
//var url = "http://google.com/404";
|
|
||||||
//var webRequestAsyncOperation = UnityWebRequest.Get(url).SendWebRequest();
|
|
||||||
//await webRequestAsyncOperation.ToUniTask();
|
|
||||||
|
|
||||||
//PlayerLoopInfo.Inject();
|
|
||||||
|
|
||||||
//_ = AsyncFixedUpdate();
|
|
||||||
//StartCoroutine(CoroutineFixedUpdate());
|
|
||||||
|
|
||||||
//StartCoroutine(TestCoroutine().ToCoroutine());
|
|
||||||
|
|
||||||
// Application.logMessageReceived += Application_logMessageReceived;
|
|
||||||
|
|
||||||
// var rp = new AsyncReactiveProperty<int>();
|
|
||||||
|
|
||||||
|
|
||||||
// rp.AddTo(this.GetCancellationTokenOnDestroy());
|
|
||||||
//var cts = new CancellationTokenSource();
|
|
||||||
|
|
||||||
|
|
||||||
// UniTask.Post(
|
|
||||||
|
|
||||||
// CancellationToken.
|
|
||||||
|
|
||||||
//UniTask.Delay(TimeSpan.FromSeconds(3)).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TestAsync(cts.Token).Forget();
|
||||||
|
|
||||||
okButton.onClick.AddListener(UniTask.UnityAction(async () =>
|
okButton.onClick.AddListener(UniTask.UnityAction(async () =>
|
||||||
{
|
{
|
||||||
|
cts.Cancel();
|
||||||
var client = new NetworkClient("http://localhost:5000", TimeSpan.FromSeconds(2),
|
await UniTask.Yield();
|
||||||
new QueueRequestDecorator(),
|
|
||||||
new LoggingDecorator());
|
|
||||||
//new AppendTokenDecorator(),
|
|
||||||
//new SetupHeaderDecorator());
|
|
||||||
|
|
||||||
|
|
||||||
await client.PostAsync("", new { Id = 100 });
|
|
||||||
|
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// _ = ExecuteAsync();
|
await UniTask.Yield();
|
||||||
|
|
||||||
// await UniTask.Yield();
|
|
||||||
|
|
||||||
// //await DelayCheck();
|
|
||||||
// /*
|
|
||||||
// UnityEngine.Debug.Log("click:" + PlayerLoopInfo.CurrentLoopType);
|
|
||||||
// StartCoroutine(CoroutineRun());
|
|
||||||
// StartCoroutine(CoroutineRun2());
|
|
||||||
// _ = AsyncRun();
|
|
||||||
// _ = AsyncLastUpdate();
|
|
||||||
// _ = AsyncLastLast();
|
|
||||||
// */
|
|
||||||
// //await UniTask.Yield();
|
|
||||||
// //_ = Test2();
|
|
||||||
// // EarlyUpdate.ExecuteMainThreadJobs
|
|
||||||
// // _ = Test2();
|
|
||||||
|
|
||||||
// //var t = await Resources.LoadAsync<TextAsset>(Application.streamingAssetsPath + "test.txt");
|
|
||||||
// //Debug.Log("LoadEnd" + PlayerLoopInfo.CurrentLoopType + ", " + (t != null));
|
|
||||||
// //Debug.Log("LoadEnd" + PlayerLoopInfo.CurrentLoopType + ", " + ((TextAsset)t).text);
|
|
||||||
|
|
||||||
|
|
||||||
// //await UniTask.Yield(PlayerLoopTiming.LastUpdate);
|
|
||||||
// //UnityEngine.Debug.Log("after update:" + Time.frameCount);
|
|
||||||
// ////await UniTask.NextFrame();
|
|
||||||
// ////await UniTask.Yield();
|
|
||||||
// ////UnityEngine.Debug.Log("after update nextframe:" + Time.frameCount);
|
|
||||||
|
|
||||||
// //StartCoroutine(CoroutineRun2());
|
|
||||||
// ////StartCoroutine(CoroutineRun());
|
|
||||||
// //UnityEngine.Debug.Log("FOO?");
|
|
||||||
|
|
||||||
// //_ = DelayFrame3_Pre();
|
|
||||||
// //await UniTask.Yield();
|
|
||||||
|
|
||||||
//}));
|
|
||||||
|
|
||||||
//cancelButton.onClick.AddListener(UniTask.UnityAction(async () =>
|
|
||||||
//{
|
|
||||||
// _ = DelayFrame3_Post();
|
|
||||||
// await UniTask.Yield();
|
|
||||||
|
|
||||||
// //await UniTask.Yield(PlayerLoopTiming.LastPreUpdate);
|
|
||||||
// //UnityEngine.Debug.Log("before update:" + Time.frameCount);
|
|
||||||
// //await UniTask.NextFrame();
|
|
||||||
// //await UniTask.Yield();
|
|
||||||
// //UnityEngine.Debug.Log("before update nextframe:" + Time.frameCount);
|
|
||||||
|
|
||||||
// //StartCoroutine(CoroutineRun());
|
|
||||||
|
|
||||||
// //UnityEngine.Debug.Log("click:" + PlayerLoopInfo.CurrentLoopType);
|
|
||||||
// //_ = Yieldding();
|
|
||||||
|
|
||||||
// //var cts = new CancellationTokenSource();
|
|
||||||
|
|
||||||
// //UnityEngine.Debug.Log("click:" + PlayerLoopInfo.CurrentLoopType + ":" + Time.frameCount);
|
|
||||||
// //var la = SceneManager.LoadSceneAsync("Scenes/ExceptionExamples").WithCancellation(cts.Token);
|
|
||||||
// ////cts.Cancel();
|
|
||||||
// //await la;
|
|
||||||
// //UnityEngine.Debug.Log("End LoadSceneAsync" + PlayerLoopInfo.CurrentLoopType + ":" + Time.frameCount);
|
|
||||||
//}));
|
|
||||||
|
|
||||||
//return;
|
|
||||||
//await UniTask.SwitchToMainThread();
|
|
||||||
|
|
||||||
//UniTaskAsyncEnumerable.EveryValueChanged(mcc, x => x.MyProperty)
|
|
||||||
// .Do(_ => { }, () => Debug.Log("COMPLETED"))
|
|
||||||
// .ForEachAsync(x =>
|
|
||||||
// {
|
|
||||||
// Debug.Log("VALUE_CHANGED:" + x);
|
|
||||||
// })
|
|
||||||
// .Forget();
|
|
||||||
|
|
||||||
//_ = Test1();
|
|
||||||
//Test2().Forget();
|
|
||||||
//StartCoroutine(Test3("https://bing.com/"));
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//bool flip = false;
|
|
||||||
//var rect = cancelButton.GetComponent<RectTransform>();
|
|
||||||
//var cts = new CancellationTokenSource();
|
|
||||||
//var ct = cts.Token;
|
|
||||||
//okButton.onClick.AddListener(UniTask.UnityAction(async () =>
|
|
||||||
//{
|
|
||||||
// await rect.DOMoveX(10f * (flip ? -1 : 1), 3).OnUpdate(() => { Debug.Log("UPDATE YEAH"); }).WithCancellation(ct);
|
|
||||||
// flip = !flip;
|
|
||||||
// // ok.
|
|
||||||
//}));
|
|
||||||
//cancelButton.onClick.AddListener(() =>
|
|
||||||
//{
|
|
||||||
// cts.Cancel();
|
|
||||||
//});
|
|
||||||
|
|
||||||
|
|
||||||
// DG.Tweening.Core.TweenerCore<int>
|
|
||||||
//Debug.Log("GO MOVEX");
|
|
||||||
//await okButton.GetComponent<RectTransform>().DOMoveX(-10.2f, 3).WithCancellation(CancellationToken.None);
|
|
||||||
//Debug.Log("END MOVEX");
|
|
||||||
|
|
||||||
|
|
||||||
//Debug.Log("AGAIN MOVE");
|
|
||||||
//await okButton.GetComponent<RectTransform>().DOMoveY(10.2f, 3).WithCancellation(CancellationToken.None);
|
|
||||||
//Debug.Log("AGAIN END MOVE");
|
|
||||||
|
|
||||||
//Debug.Log(Test().GetType().FullName);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// check stacktrace
|
|
||||||
// await UniTaskAsyncEnumerable.EveryUpdate().Where((x, i) => i % 2 == 0).Select(x => x).DistinctUntilChanged().ForEachAsync(x =>
|
|
||||||
//{
|
|
||||||
// Debug.Log("test");
|
|
||||||
//});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//// DOTween.To(
|
|
||||||
|
|
||||||
//var cts = new CancellationTokenSource();
|
|
||||||
|
|
||||||
////var tween = okButton.GetComponent<RectTransform>().DOLocalMoveX(100, 5.0f);
|
|
||||||
|
|
||||||
//cancelButton.OnClickAsAsyncEnumerable().ForEachAsync(_ =>
|
|
||||||
//{
|
|
||||||
// cts.Cancel();
|
|
||||||
//}).Forget();
|
|
||||||
|
|
||||||
|
|
||||||
//// await tween.ToUniTask(TweenCancelBehaviour.KillAndCancelAwait, cts.Token);
|
|
||||||
|
|
||||||
////tween.SetRecyclable(true);
|
|
||||||
|
|
||||||
//Debug.Log("END");
|
|
||||||
|
|
||||||
//// tween.Play();
|
|
||||||
|
|
||||||
//// DOTween.
|
|
||||||
|
|
||||||
//// DOVirtual.Float(0, 1, 1, x => { }).ToUniTask();
|
|
||||||
|
|
||||||
|
|
||||||
//await foreach (var _ in UniTaskAsyncEnumerable.EveryUpdate())
|
|
||||||
//{
|
|
||||||
// Debug.Log("Update() " + Time.frameCount);
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//await okButton.OnClickAsAsyncEnumerable().Where((x, i) => i % 2 == 0).ForEachAsync(_ =>
|
|
||||||
//{
|
|
||||||
//});
|
|
||||||
|
|
||||||
|
|
||||||
//okButton.OnClickAsAsyncEnumerable().ForEachAsync(_ =>
|
|
||||||
//{
|
|
||||||
|
|
||||||
|
|
||||||
//foreach (var (type, size) in TaskPool.GetCacheSizeInfo())
|
|
||||||
//{
|
|
||||||
// Debug.Log(type + ":" + size);
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
//}).Forget();
|
|
||||||
|
|
||||||
//CloseAsync(this.GetCancellationTokenOnDestroy()).Forget();
|
|
||||||
|
|
||||||
//okButton.onClick.AddListener(UniTask.UnityAction(async () => await UniTask.Yield()));
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//UpdateUniTask().Forget();
|
|
||||||
|
|
||||||
//StartCoroutine(Coroutine());
|
|
||||||
|
|
||||||
// PlayerLoopInfo.Inject();
|
|
||||||
await UniTask.Delay(TimeSpan.FromSeconds(1));
|
|
||||||
PlayerLoopInfo.DumpPlayerLoop("current", PlayerLoop.GetCurrentPlayerLoop());
|
|
||||||
|
|
||||||
|
|
||||||
// _ = ReturnToMainThreadTest();
|
|
||||||
|
|
||||||
//GameObject.Destroy(this.gameObject);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Application_logMessageReceived2(string condition, string stackTrace, LogType type)
|
private void Application_logMessageReceived2(string condition, string stackTrace, LogType type)
|
||||||
|
|||||||
43
src/UniTask/ProjectSettings/PackageManagerSettings.asset
Normal file
43
src/UniTask/ProjectSettings/PackageManagerSettings.asset
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &1
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 61
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 0}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
m_EnablePreviewPackages: 0
|
||||||
|
m_EnablePackageDependencies: 0
|
||||||
|
m_AdvancedSettingsExpanded: 1
|
||||||
|
m_ScopedRegistriesSettingsExpanded: 1
|
||||||
|
oneTimeWarningShown: 0
|
||||||
|
m_Registries:
|
||||||
|
- m_Id: main
|
||||||
|
m_Name:
|
||||||
|
m_Url: https://packages.unity.com
|
||||||
|
m_Scopes: []
|
||||||
|
m_IsDefault: 1
|
||||||
|
m_Capabilities: 7
|
||||||
|
m_UserSelectedRegistryName:
|
||||||
|
m_UserAddingNewScopedRegistry: 0
|
||||||
|
m_RegistryInfoDraft:
|
||||||
|
m_ErrorMessage:
|
||||||
|
m_Original:
|
||||||
|
m_Id:
|
||||||
|
m_Name:
|
||||||
|
m_Url:
|
||||||
|
m_Scopes: []
|
||||||
|
m_IsDefault: 0
|
||||||
|
m_Capabilities: 0
|
||||||
|
m_Modified: 0
|
||||||
|
m_Name:
|
||||||
|
m_Url:
|
||||||
|
m_Scopes:
|
||||||
|
-
|
||||||
|
m_SelectedScopeIndex: 0
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
m_EditorVersion: 2019.4.5f1
|
m_EditorVersion: 2020.2.1f1
|
||||||
m_EditorVersionWithRevision: 2019.4.5f1 (81610f64359c)
|
m_EditorVersionWithRevision: 2020.2.1f1 (270dd8c3da1c)
|
||||||
|
|||||||
8
src/UniTask/ProjectSettings/VersionControlSettings.asset
Normal file
8
src/UniTask/ProjectSettings/VersionControlSettings.asset
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!890905787 &1
|
||||||
|
VersionControlSettings:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_Mode: Visible Meta Files
|
||||||
|
m_CollabEditorSettings:
|
||||||
|
inProgressEnabled: 1
|
||||||
24
src/UniTask/UserSettings/EditorUserSettings.asset
Normal file
24
src/UniTask/UserSettings/EditorUserSettings.asset
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!162 &1
|
||||||
|
EditorUserSettings:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
serializedVersion: 4
|
||||||
|
m_ConfigSettings:
|
||||||
|
RecentlyUsedScenePath-0:
|
||||||
|
value: 22424703114646680e0b0227036c6c1118131a25340527392367083debf42d
|
||||||
|
flags: 0
|
||||||
|
vcSharedLogLevel:
|
||||||
|
value: 0d5e400f0650
|
||||||
|
flags: 0
|
||||||
|
m_VCAutomaticAdd: 1
|
||||||
|
m_VCDebugCom: 0
|
||||||
|
m_VCDebugCmd: 0
|
||||||
|
m_VCDebugOut: 0
|
||||||
|
m_SemanticMergeMode: 2
|
||||||
|
m_VCShowFailedCheckout: 1
|
||||||
|
m_VCOverwriteFailedCheckoutAssets: 1
|
||||||
|
m_VCProjectOverlayIcons: 1
|
||||||
|
m_VCHierarchyOverlayIcons: 1
|
||||||
|
m_VCOtherOverlayIcons: 1
|
||||||
|
m_VCAllowAsyncUpdate: 0
|
||||||
Reference in New Issue
Block a user