Skip to content

Commit 3b3e8d1

Browse files
committed
fix: AsyncAwaitUtil in Editor scripts
Using @StephenHodgson's solution from modesttree#9 (comment)
1 parent 5f948fd commit 3b3e8d1

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

UnityProject/Assets/Plugins/AsyncAwaitUtil/Source/Internal/SyncContextUtil.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,37 @@ namespace UnityAsyncAwaitUtil
1010
{
1111
public static class SyncContextUtil
1212
{
13+
#if UNITY_EDITOR
14+
private static System.Reflection.MethodInfo executionMethod;
15+
16+
/// <summary>
17+
/// HACK: makes Unity Editor execute continuations in edit mode.
18+
/// </summary>
19+
private static void ExecuteContinuations()
20+
{
21+
if (UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode)
22+
{
23+
return;
24+
}
25+
26+
var context = SynchronizationContext.Current;
27+
28+
if (executionMethod == null)
29+
{
30+
executionMethod = context.GetType().GetMethod("Exec", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
31+
}
32+
33+
executionMethod?.Invoke(context, null);
34+
}
35+
36+
[UnityEditor.InitializeOnLoadMethod]
37+
#endif
1338
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
1439
static void Install()
1540
{
41+
#if UNITY_EDITOR
42+
UnityEditor.EditorApplication.update += ExecuteContinuations;
43+
#endif
1644
UnitySynchronizationContext = SynchronizationContext.Current;
1745
UnityThreadId = Thread.CurrentThread.ManagedThreadId;
1846
}

0 commit comments

Comments
 (0)