9. public readonly struct UniTask<T>
{
readonly T result;
readonly IUniTaskSource<T> source;
readonly short token;
}
10. public readonly struct UniTask<T>
{
readonly T result;
readonly IUniTaskSource<T> source;
readonly short token;
}
11. public readonly struct UniTask<T>
{
readonly T result;
readonly IUniTaskSource<T> source;
readonly short token;
}
12. public interface IUniTaskSource<out T>
{
T GetResult(short token);
UniTaskStatus GetStatus(short token);
void OnCompleted(Action<object> continuation, object state, short token);
}
13. internal sealed class AsyncUniTask<TStateMachine, T> :
IStateMachineRunnerPromise<T>, ITaskPoolNode<AsyncUniTask<TStateMachine, T>>,
IUniTaskSource<T> where TStateMachine : IAsyncStateMachine
{
public static void SetStateMachine(ref TStateMachine stateMachine, ref IStateMachineRunnerPro
{
// プールから取得する
if (!pool.TryPop(out var result))
{
result = new AsyncUniTask<TStateMachine, T>();
}
}
public T GetResult(short token)
{
try
{
return core.GetResult(token);
}
finally
{
core.Reset(); // core.version++
return pool.TryPush(this); // プールに返す}
}
}
14. internal sealed class AsyncUniTask<TStateMachine, T> :
IStateMachineRunnerPromise<T>, ITaskPoolNode<AsyncUniTask<TStateMachine, T>>,
IUniTaskSource<T> where TStateMachine : IAsyncStateMachine
{
public static void SetStateMachine(ref TStateMachine stateMachine, ref IStateMachineRunnerPro
{
// プールから取得する
if (!pool.TryPop(out var result))
{
result = new AsyncUniTask<TStateMachine, T>();
}
}
public T GetResult(short token)
{
try
{
return core.GetResult(token);
}
finally
{
core.Reset(); // core.version++
return pool.TryPush(this); // プールに返す}
}
}
15. public interface IUniTaskSource<out T>
{
T GetResult(short token);
UniTaskStatus GetStatus(short token);
void OnCompleted(Action<object> continuation, object state, short token);
}
public readonly struct UniTask<T>
{
readonly T result;
readonly IUniTaskSource<T> source;
readonly short token;
}
16. public interface IUniTaskSource<out T>
{
T GetResult(short token);
UniTaskStatus GetStatus(short token);
void OnCompleted(Action<object> continuation, object state, short token);
}
public readonly struct UniTask<T>
{
readonly T result;
readonly IUniTaskSource<T> source;
readonly short token;
}
17. public interface IUniTaskSource<out T>
{
T GetResult(short token);
UniTaskStatus GetStatus(short token);
void OnCompleted(Action<object> continuation, object state, short token);
}
public readonly struct UniTask<T>
{
readonly T result;
readonly IUniTaskSource<T> source;
readonly short token;
}
if (token != version)
{
throw new InvalidOperationException(
"Token version is not matched,
can not await twice or get Status after await.“
);
}