67 lines
1.8 KiB
C#
67 lines
1.8 KiB
C#
|
|
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
|
|||
|
|
|
|||
|
|
using System;
|
|||
|
|
using System.Runtime.CompilerServices;
|
|||
|
|
using System.Threading;
|
|||
|
|
using System.Threading.Tasks;
|
|||
|
|
using UnityEngine;
|
|||
|
|
#if ENABLE_UNITYWEBREQUEST && (!UNITY_2019_1_OR_NEWER || UNITASK_WEBREQUEST_SUPPORT)
|
|||
|
|
using UnityEngine.Networking;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
namespace Stary.Evo
|
|||
|
|
{
|
|||
|
|
public static partial class UnityAsyncExtensions
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
#if !UNITY_2023_1_OR_NEWER
|
|||
|
|
// from Unity2023.1.0a15, AsyncOperationAwaitableExtensions.GetAwaiter is defined in UnityEngine.
|
|||
|
|
public static AsyncOperationAwaiter GetAwaiter(this AsyncOperation asyncOperation)
|
|||
|
|
{
|
|||
|
|
return new AsyncOperationAwaiter(asyncOperation);
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
public struct AsyncOperationAwaiter : ICriticalNotifyCompletion
|
|||
|
|
{
|
|||
|
|
AsyncOperation asyncOperation;
|
|||
|
|
Action<AsyncOperation> continuationAction;
|
|||
|
|
|
|||
|
|
public AsyncOperationAwaiter(AsyncOperation asyncOperation)
|
|||
|
|
{
|
|||
|
|
this.asyncOperation = asyncOperation;
|
|||
|
|
this.continuationAction = null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool IsCompleted => asyncOperation.isDone;
|
|||
|
|
|
|||
|
|
public void GetResult()
|
|||
|
|
{
|
|||
|
|
if (continuationAction != null)
|
|||
|
|
{
|
|||
|
|
asyncOperation.completed -= continuationAction;
|
|||
|
|
continuationAction = null;
|
|||
|
|
asyncOperation = null;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
asyncOperation = null;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void OnCompleted(Action continuation)
|
|||
|
|
{
|
|||
|
|
UnsafeOnCompleted(continuation);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void UnsafeOnCompleted(Action continuation)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|