using System; using System.Threading.Tasks; namespace VRMShaders { /// /// Runtime (Build 後と、Editor Playing) での非同期ロードを実現する AwaitCaller. /// NOTE: 簡便に実装されたものなので、最適化の余地はある. /// public sealed class RuntimeOnlyAwaitCaller : IAwaitCaller { private readonly NextFrameTaskScheduler _scheduler; public RuntimeOnlyAwaitCaller() { _scheduler = new NextFrameTaskScheduler(); } public Task NextFrame() { var tcs = new TaskCompletionSource(); _scheduler.Enqueue(() => tcs.SetResult(default)); return tcs.Task; } public Task Run(Action action) { return Task.Run(action); } public Task Run(Func action) { return Task.Run(action); } } }