Skip to content

Commit 0f4d766

Browse files
committed
[增加](Actor): 增加Actor的超时参数的配置化
1 parent d1e2079 commit 0f4d766

File tree

4 files changed

+180
-69
lines changed

4 files changed

+180
-69
lines changed

GameFrameX.Core/Abstractions/IWorker.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,59 +11,59 @@ public interface IWorker
1111
/// 同步执行指定的工作内容
1212
/// </summary>
1313
/// <param name="work">需要执行的工作内容委托</param>
14-
/// <param name="timeOut">执行超时时间(毫秒),默认为int.MaxValue</param>
14+
/// <param name="timeOut">执行超时时间(毫秒),默认为-1,将采用配置时间ActorTimeOut</param>
1515
/// <param name="cancellationToken">用于取消操作的令牌</param>
16-
void Tell(Action work, int timeOut = int.MaxValue, CancellationToken cancellationToken = default);
16+
void Tell(Action work, int timeOut = -1, CancellationToken cancellationToken = default);
1717

1818
/// <summary>
1919
/// 发送有返回值的工作指令
2020
/// 同步执行指定的异步工作内容
2121
/// </summary>
2222
/// <param name="work">需要执行的异步工作内容委托</param>
23-
/// <param name="timeOut">执行超时时间(毫秒),默认为int.MaxValue</param>
23+
/// <param name="timeOut">执行超时时间(毫秒),默认为-1,将采用配置时间ActorTimeOut</param>
2424
/// <param name="cancellationToken">用于取消操作的令牌</param>
25-
void Tell(Func<Task> work, int timeOut = int.MaxValue, CancellationToken cancellationToken = default);
25+
void Tell(Func<Task> work, int timeOut = -1, CancellationToken cancellationToken = default);
2626

2727
/// <summary>
2828
/// 异步发送无返回值的工作指令
2929
/// 异步执行指定的工作内容
3030
/// </summary>
3131
/// <param name="work">需要执行的工作内容委托</param>
32-
/// <param name="timeOut">执行超时时间(毫秒),默认为int.MaxValue</param>
32+
/// <param name="timeOut">执行超时时间(毫秒),默认为-1,将采用配置时间ActorTimeOut</param>
3333
/// <param name="cancellationToken">用于取消操作的令牌</param>
3434
/// <returns>表示异步操作的任务对象</returns>
35-
Task SendAsync(Action work, int timeOut = int.MaxValue, CancellationToken cancellationToken = default);
35+
Task SendAsync(Action work, int timeOut = -1, CancellationToken cancellationToken = default);
3636

3737
/// <summary>
3838
/// 异步发送有返回值的工作指令
3939
/// 异步执行指定的同步工作内容并返回结果
4040
/// </summary>
4141
/// <param name="work">需要执行的工作内容委托</param>
42-
/// <param name="timeOut">执行超时时间(毫秒),默认为int.MaxValue</param>
42+
/// <param name="timeOut">执行超时时间(毫秒),默认为-1,将采用配置时间ActorTimeOut</param>
4343
/// <param name="cancellationToken">用于取消操作的令牌</param>
4444
/// <typeparam name="T">返回结果的类型</typeparam>
4545
/// <returns>包含执行结果的异步任务对象</returns>
46-
Task<T> SendAsync<T>(Func<T> work, int timeOut = int.MaxValue, CancellationToken cancellationToken = default);
46+
Task<T> SendAsync<T>(Func<T> work, int timeOut = -1, CancellationToken cancellationToken = default);
4747

4848
/// <summary>
4949
/// 异步发送有返回值的工作指令
5050
/// 异步执行指定的异步工作内容
5151
/// </summary>
5252
/// <param name="work">需要执行的异步工作内容委托</param>
53-
/// <param name="timeOut">执行超时时间(毫秒),默认为int.MaxValue</param>
53+
/// <param name="timeOut">执行超时时间(毫秒),默认为-1,将采用配置时间ActorTimeOut</param>
5454
/// <param name="checkLock">是否在执行前检查锁定状态</param>
5555
/// <param name="cancellationToken">用于取消操作的令牌</param>
5656
/// <returns>表示嵌套异步操作的任务对象</returns>
57-
Task SendAsync(Func<Task> work, int timeOut = int.MaxValue, bool checkLock = true, CancellationToken cancellationToken = default);
57+
Task SendAsync(Func<Task> work, int timeOut = -1, bool checkLock = true, CancellationToken cancellationToken = default);
5858

5959
/// <summary>
6060
/// 异步发送有返回值的工作指令
6161
/// 异步执行指定的异步工作内容并返回结果
6262
/// </summary>
6363
/// <param name="work">需要执行的异步工作内容委托</param>
64-
/// <param name="timeOut">执行超时时间(毫秒),默认为int.MaxValue</param>
64+
/// <param name="timeOut">执行超时时间(毫秒),默认为-1,将采用配置时间ActorTimeOut</param>
6565
/// <param name="cancellationToken">用于取消操作的令牌</param>
6666
/// <typeparam name="T">返回结果的类型</typeparam>
6767
/// <returns>包含执行结果的异步任务对象</returns>
68-
Task<T> SendAsync<T>(Func<Task<T>> work, int timeOut = int.MaxValue, CancellationToken cancellationToken = default);
68+
Task<T> SendAsync<T>(Func<Task<T>> work, int timeOut = -1, CancellationToken cancellationToken = default);
6969
}

GameFrameX.Core/Actors/Actor.cs

Lines changed: 48 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,6 @@ namespace GameFrameX.Core.Actors;
1414
/// </summary>
1515
public sealed class Actor : IActor, IDisposable
1616
{
17-
/// <summary>
18-
/// 默认超时时长,使用int最大值表示无限等待
19-
/// </summary>
20-
public const int TimeOut = int.MaxValue;
21-
2217
/// <summary>
2318
/// 组件映射字典,用于存储当前Actor下的所有组件实例
2419
/// </summary>
@@ -414,21 +409,31 @@ public override string ToString()
414409
/// 发送无返回值的工作指令到Actor队列
415410
/// </summary>
416411
/// <param name="work">要执行的工作内容</param>
417-
/// <param name="timeOut">执行超时时间,默认为TimeOut常量值</param>
412+
/// <param name="timeOut">执行执行超时时间(毫秒),默认为-1,将采用配置时间ActorTimeOut</param>
418413
/// <param name="cancellationToken">取消操作的令牌</param>
419-
public void Tell(Action work, int timeOut = TimeOut, CancellationToken cancellationToken = default)
414+
public void Tell(Action work, int timeOut = -1, CancellationToken cancellationToken = default)
420415
{
416+
if (timeOut <= 0)
417+
{
418+
timeOut = GlobalSettings.CurrentSetting.ActorTimeOut;
419+
}
420+
421421
WorkerActor.Tell(work, timeOut, cancellationToken);
422422
}
423423

424424
/// <summary>
425425
/// 发送异步工作指令到Actor队列
426426
/// </summary>
427427
/// <param name="work">要执行的异步工作内容</param>
428-
/// <param name="timeOut">执行超时时间,默认为TimeOut常量值</param>
428+
/// <param name="timeOut">执行执行超时时间(毫秒),默认为-1,将采用配置时间ActorTimeOut</param>
429429
/// <param name="cancellationToken">取消操作的令牌</param>
430-
public void Tell(Func<Task> work, int timeOut = TimeOut, CancellationToken cancellationToken = default)
430+
public void Tell(Func<Task> work, int timeOut = -1, CancellationToken cancellationToken = default)
431431
{
432+
if (timeOut <= 0)
433+
{
434+
timeOut = GlobalSettings.CurrentSetting.ActorTimeOut;
435+
}
436+
432437
WorkerActor.Tell(work, timeOut, cancellationToken);
433438
}
434439

@@ -446,11 +451,16 @@ public Task SendAsync(Action work)
446451
/// 发送带超时的异步工作指令
447452
/// </summary>
448453
/// <param name="work">要执行的工作内容</param>
449-
/// <param name="timeout">执行超时时间(毫秒),默认为int.MaxValue</param>
454+
/// <param name="timeout">执行超时时间(毫秒),默认为-1,将采用配置时间ActorTimeOut</param>
450455
/// <param name="cancellationToken">取消操作的令牌</param>
451456
/// <returns>返回表示异步操作的Task</returns>
452457
public Task SendAsync(Action work, int timeout, CancellationToken cancellationToken = default)
453458
{
459+
if (timeout <= 0)
460+
{
461+
timeout = GlobalSettings.CurrentSetting.ActorTimeOut;
462+
}
463+
454464
return WorkerActor.SendAsync(work, timeout, cancellationToken);
455465
}
456466

@@ -459,36 +469,51 @@ public Task SendAsync(Action work, int timeout, CancellationToken cancellationTo
459469
/// </summary>
460470
/// <typeparam name="T">返回值类型</typeparam>
461471
/// <param name="work">要执行的工作内容</param>
462-
/// <param name="timeout">超时时间,默认为TimeOut常量值</param>
472+
/// <param name="timeout">执行超时时间(毫秒),默认为-1,将采用配置时间ActorTimeOut</param>
463473
/// <param name="cancellationToken">取消操作的令牌</param>
464474
/// <returns>返回指定类型的异步操作结果</returns>
465-
public Task<T> SendAsync<T>(Func<T> work, int timeout = TimeOut, CancellationToken cancellationToken = default)
475+
public Task<T> SendAsync<T>(Func<T> work, int timeout = -1, CancellationToken cancellationToken = default)
466476
{
477+
if (timeout <= 0)
478+
{
479+
timeout = GlobalSettings.CurrentSetting.ActorTimeOut;
480+
}
481+
467482
return WorkerActor.SendAsync(work, timeout, cancellationToken);
468483
}
469484

470485
/// <summary>
471486
/// 发送带锁检查的异步工作指令
472487
/// </summary>
473488
/// <param name="work">要执行的异步工作内容</param>
474-
/// <param name="timeout">超时时间,默认为TimeOut常量值</param>
489+
/// <param name="timeout">执行超时时间(毫秒),默认为-1,将采用配置时间ActorTimeOut</param>
475490
/// <param name="checkLock">是否检查锁,默认为true</param>
476491
/// <param name="cancellationToken">取消操作的令牌</param>
477492
/// <returns>返回表示异步操作的Task</returns>
478-
public Task SendAsync(Func<Task> work, int timeout = TimeOut, bool checkLock = true, CancellationToken cancellationToken = default)
493+
public Task SendAsync(Func<Task> work, int timeout = -1, bool checkLock = true, CancellationToken cancellationToken = default)
479494
{
495+
if (timeout <= 0)
496+
{
497+
timeout = GlobalSettings.CurrentSetting.ActorTimeOut;
498+
}
499+
480500
return WorkerActor.SendAsync(work, timeout, checkLock, cancellationToken);
481501
}
482502

483503
/// <summary>
484504
/// 发送不检查锁的异步工作指令
485505
/// </summary>
486506
/// <param name="work">要执行的异步工作内容</param>
487-
/// <param name="timeout">超时时间,默认为TimeOut常量值</param>
507+
/// <param name="timeout">执行超时时间(毫秒),默认为-1,将采用配置时间ActorTimeOut</param>
488508
/// <param name="cancellationToken">取消操作的令牌</param>
489509
/// <returns>返回表示异步操作的Task</returns>
490-
public Task SendAsyncWithoutCheck(Func<Task> work, int timeout = TimeOut, CancellationToken cancellationToken = default)
510+
public Task SendAsyncWithoutCheck(Func<Task> work, int timeout = -1, CancellationToken cancellationToken = default)
491511
{
512+
if (timeout <= 0)
513+
{
514+
timeout = GlobalSettings.CurrentSetting.ActorTimeOut;
515+
}
516+
492517
return WorkerActor.SendAsync(work, timeout, false, cancellationToken);
493518
}
494519

@@ -497,11 +522,16 @@ public Task SendAsyncWithoutCheck(Func<Task> work, int timeout = TimeOut, Cancel
497522
/// </summary>
498523
/// <typeparam name="T">返回值类型</typeparam>
499524
/// <param name="work">要执行的异步工作内容</param>
500-
/// <param name="timeout">超时时间,默认为TimeOut常量值</param>
525+
/// <param name="timeout">执行超时时间(毫秒),默认为-1,将采用配置时间ActorTimeOut</param>
501526
/// <param name="cancellationToken">取消操作的令牌</param>
502527
/// <returns>返回指定类型的异步操作结果</returns>
503-
public Task<T> SendAsync<T>(Func<Task<T>> work, int timeout = TimeOut, CancellationToken cancellationToken = default)
528+
public Task<T> SendAsync<T>(Func<Task<T>> work, int timeout = -1, CancellationToken cancellationToken = default)
504529
{
530+
if (timeout <= 0)
531+
{
532+
timeout = GlobalSettings.CurrentSetting.ActorTimeOut;
533+
}
534+
505535
return WorkerActor.SendAsync(work, timeout, cancellationToken);
506536
}
507537

0 commit comments

Comments
 (0)