Skip to content

Commit 1933ba0

Browse files
committed
[增加]1. 增加任务执行超时的参数
1 parent 573c3e4 commit 1933ba0

File tree

10 files changed

+1125
-1015
lines changed

10 files changed

+1125
-1015
lines changed

GameFrameX.Core/Abstractions/IActor.cs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,71 +4,83 @@ namespace GameFrameX.Core.Abstractions;
44

55
/// <summary>
66
/// IActor 接口定义
7+
/// 定义了一个Actor(参与者)的基本行为和属性,用于管理游戏中的实体对象
78
/// </summary>
89
public interface IActor : IWorker
910
{
1011
/// <summary>
1112
/// 获取或设置 IActor 的唯一标识
13+
/// 用于在系统中唯一标识一个Actor实例
1214
/// </summary>
1315
long Id { get; set; }
1416

1517
/// <summary>
1618
/// 获取是否自动回收
19+
/// 标识当前Actor是否可以被系统自动回收释放
1720
/// </summary>
1821
bool AutoRecycle { get; }
1922

2023
/// <summary>
2124
/// 获取工作 Actor
25+
/// 返回当前Actor的工作实例,用于处理具体的业务逻辑
2226
/// </summary>
2327
IWorkerActor WorkerActor { get; }
2428

2529
/// <summary>
2630
/// 获取订阅的哈希列表
31+
/// 存储当前Actor订阅的所有调度器ID
2732
/// </summary>
2833
HashSet<long> ScheduleIdSet { get; }
2934

3035
/// <summary>
3136
/// 获取或设置 Actor 类型
37+
/// 用于标识Actor的具体类型,便于系统进行分类管理
3238
/// </summary>
3339
ushort Type { get; set; }
3440

3541
/// <summary>
3642
/// 清理全部代理
43+
/// 清除当前Actor关联的所有组件代理实例
3744
/// </summary>
3845
void ClearAgent();
3946

4047
/// <summary>
4148
/// 反激活所有组件
49+
/// 使当前Actor的所有组件进入非激活状态,通常在Actor被回收前调用
4250
/// </summary>
4351
/// <returns>一个表示异步操作的任务</returns>
4452
Task Inactive();
4553

4654
/// <summary>
4755
/// 根据组件类型获取对应的 IComponentAgent
56+
/// 获取指定类型的组件代理实例,如果不存在且isNew为true则创建新实例
4857
/// </summary>
49-
/// <param name="agentType">组件类型</param>
58+
/// <param name="agentType">组件类型,指定要获取的组件的具体类型</param>
5059
/// <param name="isNew">是否当获取为空的时候默认创建,默认值为true</param>
5160
/// <returns>一个表示异步操作的任务,返回 IComponentAgent 实例</returns>
5261
Task<IComponentAgent> GetComponentAgent(Type agentType, bool isNew = true);
5362

5463
/// <summary>
5564
/// 根据组件类型获取对应的 IComponentAgent
65+
/// 泛型方法版本,用于获取指定类型的组件代理实例
5666
/// </summary>
57-
/// <typeparam name="T">组件类型</typeparam>
67+
/// <typeparam name="T">组件类型,必须实现IComponentAgent接口</typeparam>
5868
/// <param name="isNew">是否当获取为空的时候默认创建,默认值为true</param>
5969
/// <returns>一个表示异步操作的任务,返回指定类型的 IComponentAgent 实例</returns>
6070
Task<T> GetComponentAgent<T>(bool isNew = true) where T : IComponentAgent;
6171

6272
/// <summary>
6373
/// 设置自动回收标记
74+
/// 配置当前Actor是否允许被系统自动回收
6475
/// </summary>
65-
/// <param name="autoRecycle">是否自动回收</param>
76+
/// <param name="autoRecycle">是否自动回收,true表示允许自动回收,false表示禁止自动回收</param>
6677
void SetAutoRecycle(bool autoRecycle);
6778

6879
/// <summary>
6980
/// Actor 跨天处理
81+
/// 处理游戏服务器跨天时Actor需要执行的相关逻辑
7082
/// </summary>
71-
/// <param name="serverDay">服务器运行天数</param>
83+
/// <param name="serverDay">服务器运行天数,表示服务器运行的累计天数</param>
7284
/// <returns>一个表示异步操作的任务</returns>
7385
Task CrossDay(int serverDay);
7486
}
Lines changed: 68 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,69 @@
1-
namespace GameFrameX.Core.Abstractions;
2-
3-
/// <summary>
4-
/// IWorker接口定义
5-
/// </summary>
6-
public interface IWorker
7-
{
8-
/// <summary>
9-
/// 发送无返回值的工作指令
10-
/// </summary>
11-
/// <param name="work">工作内容</param>
12-
/// <param name="timeOut">超时时间,默认为int.MaxValue</param>
13-
void Tell(Action work, int timeOut = int.MaxValue);
14-
15-
/// <summary>
16-
/// 发送有返回值的工作指令
17-
/// </summary>
18-
/// <param name="work">工作内容</param>
19-
/// <param name="timeOut">超时时间,默认为int.MaxValue</param>
20-
void Tell(Func<Task> work, int timeOut = int.MaxValue);
21-
22-
/// <summary>
23-
/// 异步发送无返回值的工作指令
24-
/// </summary>
25-
/// <param name="work">工作内容</param>
26-
/// <param name="timeOut">超时时间,默认为int.MaxValue</param>
27-
/// <returns>一个表示异步操作的任务</returns>
28-
Task SendAsync(Action work, int timeOut = int.MaxValue);
29-
30-
/// <summary>
31-
/// 异步发送有返回值的工作指令
32-
/// </summary>
33-
/// <param name="work">工作内容</param>
34-
/// <param name="timeOut">超时时间,默认为int.MaxValue</param>
35-
/// <typeparam name="T">泛型参数</typeparam>
36-
/// <returns>一个表示异步操作的任务,任务结果为委托的返回值</returns>
37-
Task<T> SendAsync<T>(Func<T> work, int timeOut = int.MaxValue);
38-
39-
/// <summary>
40-
/// 异步发送有返回值的工作指令
41-
/// </summary>
42-
/// <param name="work">工作内容</param>
43-
/// <param name="timeOut">超时时间,默认为int.MaxValue</param>
44-
/// <param name="checkLock">是否检查锁</param>
45-
/// <returns>一个表示异步操作的任务</returns>
46-
Task SendAsync(Func<Task> work, int timeOut = int.MaxValue, bool checkLock = true);
47-
48-
/// <summary>
49-
/// 异步发送有返回值的工作指令
50-
/// </summary>
51-
/// <param name="work">工作内容</param>
52-
/// <param name="timeOut">超时时间,默认为int.MaxValue</param>
53-
/// <typeparam name="T">泛型参数</typeparam>
54-
/// <returns>一个表示异步操作的任务,任务结果为委托的返回值</returns>
55-
Task<T> SendAsync<T>(Func<Task<T>> work, int timeOut = int.MaxValue);
1+
namespace GameFrameX.Core.Abstractions;
2+
3+
/// <summary>
4+
/// 工作者接口定义
5+
/// 用于处理异步和同步的工作任务,支持超时和取消操作
6+
/// </summary>
7+
public interface IWorker
8+
{
9+
/// <summary>
10+
/// 发送无返回值的工作指令
11+
/// 同步执行指定的工作内容
12+
/// </summary>
13+
/// <param name="work">需要执行的工作内容委托</param>
14+
/// <param name="timeOut">执行超时时间(毫秒),默认为int.MaxValue</param>
15+
/// <param name="cancellationToken">用于取消操作的令牌</param>
16+
void Tell(Action work, int timeOut = int.MaxValue, CancellationToken cancellationToken = default);
17+
18+
/// <summary>
19+
/// 发送有返回值的工作指令
20+
/// 同步执行指定的异步工作内容
21+
/// </summary>
22+
/// <param name="work">需要执行的异步工作内容委托</param>
23+
/// <param name="timeOut">执行超时时间(毫秒),默认为int.MaxValue</param>
24+
/// <param name="cancellationToken">用于取消操作的令牌</param>
25+
void Tell(Func<Task> work, int timeOut = int.MaxValue, CancellationToken cancellationToken = default);
26+
27+
/// <summary>
28+
/// 异步发送无返回值的工作指令
29+
/// 异步执行指定的工作内容
30+
/// </summary>
31+
/// <param name="work">需要执行的工作内容委托</param>
32+
/// <param name="timeOut">执行超时时间(毫秒),默认为int.MaxValue</param>
33+
/// <param name="cancellationToken">用于取消操作的令牌</param>
34+
/// <returns>表示异步操作的任务对象</returns>
35+
Task SendAsync(Action work, int timeOut = int.MaxValue, CancellationToken cancellationToken = default);
36+
37+
/// <summary>
38+
/// 异步发送有返回值的工作指令
39+
/// 异步执行指定的同步工作内容并返回结果
40+
/// </summary>
41+
/// <param name="work">需要执行的工作内容委托</param>
42+
/// <param name="timeOut">执行超时时间(毫秒),默认为int.MaxValue</param>
43+
/// <param name="cancellationToken">用于取消操作的令牌</param>
44+
/// <typeparam name="T">返回结果的类型</typeparam>
45+
/// <returns>包含执行结果的异步任务对象</returns>
46+
Task<T> SendAsync<T>(Func<T> work, int timeOut = int.MaxValue, CancellationToken cancellationToken = default);
47+
48+
/// <summary>
49+
/// 异步发送有返回值的工作指令
50+
/// 异步执行指定的异步工作内容
51+
/// </summary>
52+
/// <param name="work">需要执行的异步工作内容委托</param>
53+
/// <param name="timeOut">执行超时时间(毫秒),默认为int.MaxValue</param>
54+
/// <param name="checkLock">是否在执行前检查锁定状态</param>
55+
/// <param name="cancellationToken">用于取消操作的令牌</param>
56+
/// <returns>表示嵌套异步操作的任务对象</returns>
57+
Task SendAsync(Func<Task> work, int timeOut = int.MaxValue, bool checkLock = true, CancellationToken cancellationToken = default);
58+
59+
/// <summary>
60+
/// 异步发送有返回值的工作指令
61+
/// 异步执行指定的异步工作内容并返回结果
62+
/// </summary>
63+
/// <param name="work">需要执行的异步工作内容委托</param>
64+
/// <param name="timeOut">执行超时时间(毫秒),默认为int.MaxValue</param>
65+
/// <param name="cancellationToken">用于取消操作的令牌</param>
66+
/// <typeparam name="T">返回结果的类型</typeparam>
67+
/// <returns>包含执行结果的异步任务对象</returns>
68+
Task<T> SendAsync<T>(Func<Task<T>> work, int timeOut = int.MaxValue, CancellationToken cancellationToken = default);
5669
}
Lines changed: 64 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,65 @@
1-
namespace GameFrameX.Core.Abstractions;
2-
3-
/// <summary>
4-
/// 工作Actor接口定义
5-
/// </summary>
6-
public interface IWorkerActor : IWorker
7-
{
8-
/// <summary>
9-
/// 判断是否需要入队
10-
/// </summary>
11-
/// <returns>一个元组,包含是否需要入队的布尔值和调用链ID</returns>
12-
(bool needEnqueue, long chainId) IsNeedEnqueue();
13-
14-
/// <summary>
15-
/// 将无返回值的委托入队
16-
/// </summary>
17-
/// <param name="work">无返回值的委托</param>
18-
/// <param name="callChainId">调用链ID</param>
19-
/// <param name="discard">是否强制入队</param>
20-
/// <param name="timeOut">超时时间</param>
21-
/// <returns>一个表示异步操作的任务</returns>
22-
Task Enqueue(Action work, long callChainId, bool discard = false, int timeOut = int.MaxValue);
23-
24-
/// <summary>
25-
/// 将有返回值的委托入队
26-
/// </summary>
27-
/// <param name="work">有返回值的委托</param>
28-
/// <param name="callChainId">调用链ID</param>
29-
/// <param name="discard">是否强制入队</param>
30-
/// <param name="timeOut">超时时间</param>
31-
/// <typeparam name="T">泛型参数</typeparam>
32-
/// <returns>一个表示异步操作的任务,任务结果为委托的返回值</returns>
33-
Task<T> Enqueue<T>(Func<T> work, long callChainId, bool discard = false, int timeOut = int.MaxValue);
34-
35-
/// <summary>
36-
/// 将返回Task的委托入队
37-
/// </summary>
38-
/// <param name="work">返回Task的委托</param>
39-
/// <param name="callChainId">调用链ID</param>
40-
/// <param name="discard">是否强制入队</param>
41-
/// <param name="timeOut">超时时间</param>
42-
/// <returns>一个表示异步操作的任务</returns>
43-
Task Enqueue(Func<Task> work, long callChainId, bool discard = false, int timeOut = int.MaxValue);
44-
45-
/// <summary>
46-
/// 将返回Task<T>的委托入队</T>
47-
/// </summary>
48-
/// <param name="work">返回Task<T>的委托</T></param>
49-
/// <param name="callChainId">调用链ID</param>
50-
/// <param name="discard">是否强制入队</param>
51-
/// <param name="timeOut">超时时间</param>
52-
/// <typeparam name="T">泛型参数</typeparam>
53-
/// <returns>一个表示异步操作的任务,任务结果为委托的返回值</returns>
54-
Task<T> Enqueue<T>(Func<Task<T>> work, long callChainId, bool discard = false, int timeOut = int.MaxValue);
1+
namespace GameFrameX.Core.Abstractions;
2+
3+
/// <summary>
4+
/// 工作Actor接口定义
5+
/// 用于处理异步任务队列的Actor接口,继承自IWorker接口
6+
/// </summary>
7+
public interface IWorkerActor : IWorker
8+
{
9+
/// <summary>
10+
/// 判断是否需要入队
11+
/// 检查当前任务是否需要进入队列进行处理
12+
/// </summary>
13+
/// <returns>返回一个元组,包含两个值:needEnqueue(bool类型,表示是否需要入队)和chainId(long类型,表示调用链ID)</returns>
14+
(bool needEnqueue, long chainId) IsNeedEnqueue();
15+
16+
/// <summary>
17+
/// 将无返回值的委托入队
18+
/// 将Action类型的委托添加到任务队列中进行异步处理
19+
/// </summary>
20+
/// <param name="work">要执行的无返回值委托方法</param>
21+
/// <param name="callChainId">用于跟踪调用链的唯一标识符</param>
22+
/// <param name="discard">当为true时,表示强制将任务入队,即使队列已满也会尝试入队</param>
23+
/// <param name="timeOut">任务执行的超时时间,默认为int.MaxValue</param>
24+
/// <param name="cancellationToken">用于取消操作的令牌</param>
25+
/// <returns>表示异步操作的Task对象</returns>
26+
Task Enqueue(Action work, long callChainId, bool discard = false, int timeOut = int.MaxValue, CancellationToken cancellationToken = default);
27+
28+
/// <summary>
29+
/// 将有返回值的委托入队
30+
/// 将Func<T/>类型的委托添加到任务队列中进行异步处理
31+
/// </summary>
32+
/// <param name="work">要执行的有返回值委托方法</param>
33+
/// <param name="callChainId">用于跟踪调用链的唯一标识符</param>
34+
/// <param name="discard">当为true时,表示强制将任务入队,即使队列已满也会尝试入队</param>
35+
/// <param name="timeOut">任务执行的超时时间,默认为int.MaxValue</param>
36+
/// <param name="cancellationToken">用于取消操作的令牌</param>
37+
/// <typeparam name="T">委托返回值的类型</typeparam>
38+
/// <returns>表示异步操作的Task<T/>对象,其结果为委托的返回值</returns>
39+
Task<T> Enqueue<T>(Func<T> work, long callChainId, bool discard = false, int timeOut = int.MaxValue, CancellationToken cancellationToken = default);
40+
41+
/// <summary>
42+
/// 将返回Task的委托入队
43+
/// 将Func<Task/>类型的委托添加到任务队列中进行异步处理
44+
/// </summary>
45+
/// <param name="work">要执行的返回Task的异步委托方法</param>
46+
/// <param name="callChainId">用于跟踪调用链的唯一标识符</param>
47+
/// <param name="discard">当为true时,表示强制将任务入队,即使队列已满也会尝试入队</param>
48+
/// <param name="timeOut">任务执行的超时时间,默认为int.MaxValue</param>
49+
/// <param name="cancellationToken">用于取消操作的令牌</param>
50+
/// <returns>表示异步操作的Task对象</returns>
51+
Task Enqueue(Func<Task> work, long callChainId, bool discard = false, int timeOut = int.MaxValue, CancellationToken cancellationToken = default);
52+
53+
/// <summary>
54+
/// 将返回Task<T/>的委托入队
55+
/// 将Func<Task/><T/>>类型的委托添加到任务队列中进行异步处理
56+
/// </summary>
57+
/// <param name="work">要执行的返回Task<T/>的异步委托方法</param>
58+
/// <param name="callChainId">用于跟踪调用链的唯一标识符</param>
59+
/// <param name="discard">当为true时,表示强制将任务入队,即使队列已满也会尝试入队</param>
60+
/// <param name="timeOut">任务执行的超时时间,默认为int.MaxValue</param>
61+
/// <param name="cancellationToken">用于取消操作的令牌</param>
62+
/// <typeparam name="T">异步操作返回值的类型</typeparam>
63+
/// <returns>表示异步操作的Task<T/>对象,其结果为委托的返回值</returns>
64+
Task<T> Enqueue<T>(Func<Task<T>> work, long callChainId, bool discard = false, int timeOut = int.MaxValue, CancellationToken cancellationToken = default);
5565
}

0 commit comments

Comments
 (0)