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();
}
}