using Milimoe.FunGame.Core.Model;
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()
{
while (true)
{
if (!Working) break;
Thread.Sleep(100);
}
}
///
/// 异步等待任务完成
///
protected async virtual Task WaitForWorkDoneAsync()
{
await Task.Factory.StartNew(() =>
{
while (true)
{
if (!Working) break;
Thread.Sleep(100);
}
});
}
}
}