@@ -66,7 +66,12 @@ public class MailComponentAgent : StateComponentAgent<MailComponent, MailBoxStat
6666 /// 先按 <c>LastSyncCampaignTime</c> 增量扫描新发布 Campaign 做懒创建(B5),再扫描已撤回 Campaign 对已实例化邮件执行 B3 作废。变更后持久化并推送 <c>NotifyMailChanged</c>。
6767 /// </remarks>
6868 [ Service ]
69- public virtual async Task SyncAsync ( )
69+ public virtual Task SyncAsync ( )
70+ {
71+ return SyncAsyncImpl ( ) ;
72+ }
73+
74+ private async Task SyncAsyncImpl ( )
7075 {
7176 var ( playerLevel , playerCreatedTime ) = await GetPlayerFilterContext ( ) ;
7277 var serverId = GameServerConst . Game . Id ;
@@ -143,7 +148,12 @@ public virtual async Task SyncAsync()
143148 /// 处理 <see cref="ReqMailList"/>:先懒同步,再分页返回邮件摘要(排除已删除)。
144149 /// </summary>
145150 [ Service ]
146- public virtual async Task OnReqMailListAsync ( INetWorkChannel netWorkChannel , ReqMailList request , RespMailList response )
151+ public virtual Task OnReqMailListAsync ( INetWorkChannel netWorkChannel , ReqMailList request , RespMailList response )
152+ {
153+ return OnReqMailListAsyncImpl ( netWorkChannel , request , response ) ;
154+ }
155+
156+ private async Task OnReqMailListAsyncImpl ( INetWorkChannel netWorkChannel , ReqMailList request , RespMailList response )
147157 {
148158 await SyncAsync ( ) ;
149159
@@ -178,7 +188,12 @@ public virtual async Task OnReqMailListAsync(INetWorkChannel netWorkChannel, Req
178188 /// 处理 <see cref="ReqMailRead"/>:标记已读(读信幂等),返回完整文案与附件领取状态。
179189 /// </summary>
180190 [ Service ]
181- public virtual async Task OnReqMailReadAsync ( INetWorkChannel netWorkChannel , ReqMailRead request , RespMailRead response )
191+ public virtual Task OnReqMailReadAsync ( INetWorkChannel netWorkChannel , ReqMailRead request , RespMailRead response )
192+ {
193+ return OnReqMailReadAsyncImpl ( netWorkChannel , request , response ) ;
194+ }
195+
196+ private async Task OnReqMailReadAsyncImpl ( INetWorkChannel netWorkChannel , ReqMailRead request , RespMailRead response )
182197 {
183198 var state = OwnerComponent . State ;
184199 var mail = TryFindMail ( state , request . MailId ) ;
@@ -233,7 +248,12 @@ public virtual async Task OnReqMailReadAsync(INetWorkChannel netWorkChannel, Req
233248 /// 处理 <see cref="ReqMailDelete"/>:U1 §4.8 删除算法(B2)。未领附件邮件拒绝删除。
234249 /// </summary>
235250 [ Service ]
236- public virtual async Task OnReqMailDeleteAsync ( INetWorkChannel netWorkChannel , ReqMailDelete request , RespMailDelete response )
251+ public virtual Task OnReqMailDeleteAsync ( INetWorkChannel netWorkChannel , ReqMailDelete request , RespMailDelete response )
252+ {
253+ return OnReqMailDeleteAsyncImpl ( netWorkChannel , request , response ) ;
254+ }
255+
256+ private async Task OnReqMailDeleteAsyncImpl ( INetWorkChannel netWorkChannel , ReqMailDelete request , RespMailDelete response )
237257 {
238258 var state = OwnerComponent . State ;
239259 var mail = TryFindMail ( state , request . MailId ) ;
@@ -277,7 +297,12 @@ public virtual async Task OnReqMailDeleteAsync(INetWorkChannel netWorkChannel, R
277297 /// </summary>
278298 /// <remarks>不触发 <see cref="SyncAsync"/>:领取作用于当前邮件箱快照,懒同步由列表 / 读信路径保证。幂等命中已领槽位时按成功回包,不重复发奖。</remarks>
279299 [ Service ]
280- public virtual async Task OnReqMailClaimAttachmentAsync ( INetWorkChannel netWorkChannel , ReqMailClaimAttachment request , RespMailClaimAttachment response )
300+ public virtual Task OnReqMailClaimAttachmentAsync ( INetWorkChannel netWorkChannel , ReqMailClaimAttachment request , RespMailClaimAttachment response )
301+ {
302+ return OnReqMailClaimAttachmentAsyncImpl ( netWorkChannel , request , response ) ;
303+ }
304+
305+ private async Task OnReqMailClaimAttachmentAsyncImpl ( INetWorkChannel netWorkChannel , ReqMailClaimAttachment request , RespMailClaimAttachment response )
281306 {
282307 var state = OwnerComponent . State ;
283308 var prepare = MailAttachmentClaim . Prepare ( state , request . MailId , request . SlotId ) ;
@@ -328,7 +353,12 @@ public virtual async Task OnReqMailClaimAttachmentAsync(INetWorkChannel netWorkC
328353 /// 处理 <see cref="ReqMailClaimAllAttachment"/>:一键领取当前邮件箱所有 <see cref="ClaimStatus.Claimable"/> 槽位。逐项独立判定,部分失败不影响其余项。
329354 /// </summary>
330355 [ Service ]
331- public virtual async Task OnReqMailClaimAllAttachmentAsync ( INetWorkChannel netWorkChannel , ReqMailClaimAllAttachment request , RespMailClaimAllAttachment response )
356+ public virtual Task OnReqMailClaimAllAttachmentAsync ( INetWorkChannel netWorkChannel , ReqMailClaimAllAttachment request , RespMailClaimAllAttachment response )
357+ {
358+ return OnReqMailClaimAllAttachmentAsyncImpl ( netWorkChannel , request , response ) ;
359+ }
360+
361+ private async Task OnReqMailClaimAllAttachmentAsyncImpl ( INetWorkChannel netWorkChannel , ReqMailClaimAllAttachment request , RespMailClaimAllAttachment response )
332362 {
333363 var state = OwnerComponent . State ;
334364 var changedMailIds = new List < long > ( ) ;
@@ -425,7 +455,12 @@ private static void FillClaimResponse(RespMailClaimAttachment response, MailStat
425455 /// 过期清理(U1 §4.7 / B4)。遍历邮件箱,按 Campaign <c>ExpireAttachmentPolicy</c> 处理到期邮件。
426456 /// </summary>
427457 [ Service ]
428- public virtual async Task ExpireSweepAsync ( )
458+ public virtual Task ExpireSweepAsync ( )
459+ {
460+ return ExpireSweepAsyncImpl ( ) ;
461+ }
462+
463+ private async Task ExpireSweepAsyncImpl ( )
429464 {
430465 var state = OwnerComponent . State ;
431466 var now = TimerHelper . UnixTimeSeconds ( ) ;
@@ -485,7 +520,12 @@ public virtual async Task ExpireSweepAsync()
485520 /// </summary>
486521 /// <remarks>幂等:重复调用对已处理邮件无副作用。通常由 <see cref="SyncAsync"/> 扫描已撤回 Campaign 时触发;本方法也可供撤回推送路径直接调用。</remarks>
487522 [ Service ]
488- public virtual async Task ApplyRevokeAsync ( long campaignId , int campaignVersion )
523+ public virtual Task ApplyRevokeAsync ( long campaignId , int campaignVersion )
524+ {
525+ return ApplyRevokeAsyncImpl ( campaignId , campaignVersion ) ;
526+ }
527+
528+ private async Task ApplyRevokeAsyncImpl ( long campaignId , int campaignVersion )
489529 {
490530 var state = OwnerComponent . State ;
491531 var changedMailIds = new List < long > ( ) ;
0 commit comments