using Unity.Jobs; namespace Pathfinding.Util { public interface IProgress { float Progress { get; } } /// /// A promise that T is being calculated asynchronously. /// /// The result can be accessed by calling . This will block until the calculation is complete. /// public struct Promise: IProgress, System.IDisposable where T : IProgress, System.IDisposable { public JobHandle handle; T result; public Promise(JobHandle handle, T result) { this.handle = handle; this.result = result; } public bool IsCompleted { get { return handle.IsCompleted; } } public float Progress { get { return result.Progress; } } public T GetValue () { return result; } public T Complete () { handle.Complete(); return result; } public void Dispose () { Complete(); result.Dispose(); } } }