您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
105 行
3.2 KiB
105 行
3.2 KiB
using System;
|
|
|
|
namespace Unity.Services.Core.Internal
|
|
{
|
|
/// <summary>
|
|
/// Default implementation for <see cref="IAsyncOperationAwaiter"/>.
|
|
/// </summary>
|
|
struct AsyncOperationAwaiter : IAsyncOperationAwaiter
|
|
{
|
|
IAsyncOperation m_Operation;
|
|
|
|
/// <summary>
|
|
/// Create an awaiter for the given <paramref name="asyncOperation"/>.
|
|
/// </summary>
|
|
/// <param name="asyncOperation">
|
|
/// The operation to await.
|
|
/// </param>
|
|
public AsyncOperationAwaiter(IAsyncOperation asyncOperation)
|
|
{
|
|
m_Operation = asyncOperation;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Schedules the continuation action that's invoked when the instance completes.
|
|
/// </summary>
|
|
/// <param name="continuation">
|
|
/// The action to invoke when the operation completes.
|
|
/// </param>
|
|
/// <remarks>
|
|
/// Straightforward implementation of <see cref="System.Runtime.CompilerServices.ICriticalNotifyCompletion"/>.
|
|
/// </remarks>
|
|
public void OnCompleted(Action continuation)
|
|
{
|
|
m_Operation.Completed += operation => continuation();
|
|
}
|
|
|
|
/// <inheritdoc cref="OnCompleted"/>
|
|
public void UnsafeOnCompleted(Action continuation)
|
|
{
|
|
m_Operation.Completed += operation => continuation();
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
public bool IsCompleted => m_Operation.IsDone;
|
|
|
|
/// <inheritdoc/>
|
|
public void GetResult()
|
|
{
|
|
if (m_Operation.Status == AsyncOperationStatus.Failed
|
|
|| m_Operation.Status == AsyncOperationStatus.Cancelled)
|
|
{
|
|
throw m_Operation.Exception;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Default implementation for <see cref="IAsyncOperationAwaiter{T}"/>.
|
|
/// </summary>
|
|
/// <typeparam name="T">
|
|
/// The result's type of the awaited operation.
|
|
/// </typeparam>
|
|
struct AsyncOperationAwaiter<T> : IAsyncOperationAwaiter<T>
|
|
{
|
|
IAsyncOperation<T> m_Operation;
|
|
|
|
/// <summary>
|
|
/// Create an awaiter for the given <paramref name="asyncOperation"/>.
|
|
/// </summary>
|
|
/// <param name="asyncOperation">
|
|
/// The operation to await.
|
|
/// </param>
|
|
public AsyncOperationAwaiter(IAsyncOperation<T> asyncOperation)
|
|
{
|
|
m_Operation = asyncOperation;
|
|
}
|
|
|
|
/// <inheritdoc cref="AsyncOperationAwaiter.OnCompleted"/>
|
|
public void OnCompleted(Action continuation)
|
|
{
|
|
m_Operation.Completed += obj => continuation();
|
|
}
|
|
|
|
/// <inheritdoc cref="AsyncOperationAwaiter.UnsafeOnCompleted"/>
|
|
public void UnsafeOnCompleted(Action continuation)
|
|
{
|
|
m_Operation.Completed += obj => continuation();
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
public bool IsCompleted => m_Operation.IsDone;
|
|
|
|
/// <inheritdoc/>
|
|
public T GetResult()
|
|
{
|
|
if (m_Operation.Status == AsyncOperationStatus.Failed
|
|
|| m_Operation.Status == AsyncOperationStatus.Cancelled)
|
|
{
|
|
throw m_Operation.Exception;
|
|
}
|
|
|
|
return m_Operation.Result;
|
|
}
|
|
}
|
|
}
|