namespace Milimoe.FunGame.Core.Library.Common.Architecture
{
///
/// 继承这个类可以获得异步等待的功能
/// 参考实现
///
public abstract class AsyncAwaiter
{
///
/// 接收到的实例
///
protected abstract T? Work { get; set; }
///
/// 是否处于等待的状态
///
protected bool Working { get; set; } = false;
///
/// 异步操作前,请设置为等待状态
///
protected virtual void SetWorking()
{
Working = true;
Work = default;
}
///
/// 等待任务完成(需要自己异步)
///
protected virtual void WaitForWorkDone()
{
for (int i = 0; i < 10; i++)
{
if (!Working) break;
Thread.Sleep(50);
}
while (true)
{
if (!Working) break;
Thread.Sleep(20);
}
}
///
/// 异步等待任务完成
///
protected async virtual Task WaitForWorkDoneAsync()
{
for (int i = 0; i < 10; i++)
{
if (!Working) break;
await Task.Delay(50);
}
while (Working)
{
await Task.Delay(20);
}
}
}
}