mirror of
https://github.com/project-redbud/FunGame-Core.git
synced 2025-04-22 03:59:35 +08:00
添加TaskAwaiter;添加DataRequest枚举 (#43)
This commit is contained in:
parent
98367f89e2
commit
20926ebb09
@ -2,6 +2,7 @@
|
|||||||
using System.Net.NetworkInformation;
|
using System.Net.NetworkInformation;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
using Milimoe.FunGame.Core.Library.Common.Architecture;
|
||||||
using Milimoe.FunGame.Core.Library.Constant;
|
using Milimoe.FunGame.Core.Library.Constant;
|
||||||
|
|
||||||
// 通用工具类,客户端和服务器端都可以直接调用的工具方法都可以写在这里
|
// 通用工具类,客户端和服务器端都可以直接调用的工具方法都可以写在这里
|
||||||
@ -382,4 +383,23 @@ namespace Milimoe.FunGame.Core.Api.Utility
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region 多线程服务
|
||||||
|
|
||||||
|
public class TaskUtility
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 开启一个任务:调用返回对象的OnCompleted()方法可以执行后续操作,支持异步
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="action"></param>
|
||||||
|
public static TaskAwaiter StartAndAwaitTask(Action action) => new(Service.TaskManager.StartAndAwaitTask(action));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 开启一个任务:调用返回对象的OnCompleted()方法可以执行后续操作,支持异步
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="task"></param>
|
||||||
|
public static TaskAwaiter StartAndAwaitTask(Func<Task> task) => new(Service.TaskManager.StartAndAwaitTask(task));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
9
Interface/Base/ITaskAwaiter.cs
Normal file
9
Interface/Base/ITaskAwaiter.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
namespace Milimoe.FunGame.Core.Interface.Base
|
||||||
|
{
|
||||||
|
public interface ITaskAwaiter
|
||||||
|
{
|
||||||
|
public bool IsCompleted { get; }
|
||||||
|
|
||||||
|
public ITaskAwaiter OnCompleted(Action action);
|
||||||
|
}
|
||||||
|
}
|
43
Library/Common/Architecture/TaskAwaiter.cs
Normal file
43
Library/Common/Architecture/TaskAwaiter.cs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
using Milimoe.FunGame.Core.Interface.Base;
|
||||||
|
|
||||||
|
namespace Milimoe.FunGame.Core.Library.Common.Architecture
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 任务的等待器,可以设置在任务完成后需要的操作
|
||||||
|
/// </summary>
|
||||||
|
public struct TaskAwaiter
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 任务是否完成
|
||||||
|
/// </summary>
|
||||||
|
public readonly bool IsCompleted => awaiter.IsCompleted;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <para>内部实现类</para>
|
||||||
|
/// <see cref="Service.TaskManager.TaskAwaiter"/>
|
||||||
|
/// </summary>
|
||||||
|
private ITaskAwaiter awaiter;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 构造一个等待器
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="awaiter"></param>
|
||||||
|
internal TaskAwaiter(ITaskAwaiter awaiter)
|
||||||
|
{
|
||||||
|
this.awaiter = awaiter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <para>返回TaskAwaiter可以连续的调用方法</para>
|
||||||
|
/// <para>但是意义不大,前一个OnCompleted方法并不会等待下一个方法</para>
|
||||||
|
/// <para>可以理解为并行广播</para>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="action"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public TaskAwaiter OnCompleted(Action action)
|
||||||
|
{
|
||||||
|
awaiter = awaiter.OnCompleted(action);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -89,6 +89,8 @@ namespace Milimoe.FunGame.Core.Library.Constant
|
|||||||
Main_GetNotice,
|
Main_GetNotice,
|
||||||
Main_CreateRoom,
|
Main_CreateRoom,
|
||||||
Main_UpdateRoom,
|
Main_UpdateRoom,
|
||||||
|
Main_IntoRoom,
|
||||||
|
Main_QuitRoom,
|
||||||
Reg_GetRegVerifyCode,
|
Reg_GetRegVerifyCode,
|
||||||
Login_GetFindPasswordVerifyCode,
|
Login_GetFindPasswordVerifyCode,
|
||||||
Login_UpdatePassword,
|
Login_UpdatePassword,
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System.Collections;
|
||||||
using System.Collections;
|
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Milimoe.FunGame.Core.Library.Common.JsonConverter;
|
using Milimoe.FunGame.Core.Library.Common.JsonConverter;
|
||||||
|
65
Service/TaskManager.cs
Normal file
65
Service/TaskManager.cs
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
using Milimoe.FunGame.Core.Interface.Base;
|
||||||
|
|
||||||
|
namespace Milimoe.FunGame.Core.Service
|
||||||
|
{
|
||||||
|
internal class TaskManager
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 开启一个任务:调用返回对象的OnCompleted()方法可以执行后续操作,支持异步
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="action"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
internal static ITaskAwaiter StartAndAwaitTask(Action action) => new TaskAwaiter(action);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 开启一个任务:调用返回对象的OnCompleted()方法可以执行后续操作,支持异步
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="function"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
internal static ITaskAwaiter StartAndAwaitTask(Func<Task> function) => new TaskAwaiter(function);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 内部实现类
|
||||||
|
/// </summary>
|
||||||
|
private class TaskAwaiter : ITaskAwaiter
|
||||||
|
{
|
||||||
|
public bool IsCompleted => _IsCompleted;
|
||||||
|
|
||||||
|
private delegate void CompletedEvent();
|
||||||
|
private event CompletedEvent? Completed;
|
||||||
|
private bool _IsCompleted = false;
|
||||||
|
|
||||||
|
internal TaskAwaiter(Action action) => _ = Worker(action);
|
||||||
|
|
||||||
|
internal TaskAwaiter(Func<Task> function) => _ = Worker(function);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <para>返回ITaskAwaiter可以进一步调用方法</para>
|
||||||
|
/// <para>但是意义不大,前一个OnCompleted方法并不会等待下一个方法</para>
|
||||||
|
/// <para>可以理解为并行广播</para>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="action"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public ITaskAwaiter OnCompleted(Action action)
|
||||||
|
{
|
||||||
|
if (IsCompleted) action();
|
||||||
|
else Completed += new CompletedEvent(action);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task Worker(Action action)
|
||||||
|
{
|
||||||
|
await Task.Run(action);
|
||||||
|
_IsCompleted = true;
|
||||||
|
Completed?.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task Worker(Func<Task> function)
|
||||||
|
{
|
||||||
|
await function();
|
||||||
|
_IsCompleted = true;
|
||||||
|
Completed?.Invoke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user