CapersProject/Packages/com.arongranberg.astar/Utilities/Promise.cs
2024-06-04 03:26:03 +09:00

49 lines
902 B
C#

using Unity.Jobs;
namespace Pathfinding.Util {
public interface IProgress {
float Progress { get; }
}
/// <summary>
/// A promise that T is being calculated asynchronously.
///
/// The result can be accessed by calling <see cref="Complete"/>. This will block until the calculation is complete.
/// </summary>
public struct Promise<T>: 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();
}
}
}