64 lines
1.6 KiB
C#
64 lines
1.6 KiB
C#
|
using System;
|
|||
|
|
|||
|
namespace Cysharp.Threading.Tasks
|
|||
|
{
|
|||
|
public abstract class MoveNextSource : IUniTaskSource<bool>
|
|||
|
{
|
|||
|
protected UniTaskCompletionSourceCore<bool> completionSource;
|
|||
|
|
|||
|
public bool GetResult(short token)
|
|||
|
{
|
|||
|
return completionSource.GetResult(token);
|
|||
|
}
|
|||
|
|
|||
|
public UniTaskStatus GetStatus(short token)
|
|||
|
{
|
|||
|
return completionSource.GetStatus(token);
|
|||
|
}
|
|||
|
|
|||
|
public void OnCompleted(Action<object> continuation, object state, short token)
|
|||
|
{
|
|||
|
completionSource.OnCompleted(continuation, state, token);
|
|||
|
}
|
|||
|
|
|||
|
public UniTaskStatus UnsafeGetStatus()
|
|||
|
{
|
|||
|
return completionSource.UnsafeGetStatus();
|
|||
|
}
|
|||
|
|
|||
|
void IUniTaskSource.GetResult(short token)
|
|||
|
{
|
|||
|
completionSource.GetResult(token);
|
|||
|
}
|
|||
|
|
|||
|
protected bool TryGetResult<T>(UniTask<T>.Awaiter awaiter, out T result)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
result = awaiter.GetResult();
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
completionSource.TrySetException(ex);
|
|||
|
result = default;
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
protected bool TryGetResult(UniTask.Awaiter awaiter)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
awaiter.GetResult();
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
completionSource.TrySetException(ex);
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|