using System; using System.Threading.Tasks; namespace VRMShaders { /// /// ImporterContext の 非同期実行 LoadAsync を補助する。 /// この関数を経由して await すること。 /// そうしないと、同期実行 Load 時にデッドロックに陥るかもしれない。 /// (SynchronizationContext に Post された 継続が再開されない) /// public interface IAwaitCaller { /// /// フレームレートを維持するために1フレーム待つ /// /// Task NextFrame(); /// /// 非同期に実行して、終了を待つ /// /// /// Task Run(Action action); /// /// 非同期に実行して、終了を待つ /// /// /// /// Task Run(Func action); /// /// 指定した時間が経過している場合のみ、NextFrame() を使って1フレーム待つ /// /// タイムアウト時はNextFrame()を呼び出す。そうではない場合、Task.CompletedTaskを返す Task NextFrameIfTimedOut(); } }