Skip to content

Commit 69856e3

Browse files
committed
refactor(web): WebProtoBuffData 迁移到 ReferencePool 引用池模式
- readonly 字段改为属性(支持池回收后重新赋值) - 移除有参构造函数,新增无参构造函数(ReferencePool new 约束) - 新增 Create 工厂方法,通过 ReferencePool.Acquire 获取实例 - 新增 Clear 重写,取消未完成 Task 并清理引用
1 parent e1d5d85 commit 69856e3

1 file changed

Lines changed: 30 additions & 13 deletions

File tree

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System.Threading.Tasks;
1+
using System.Threading.Tasks;
22
using GameFrameX.Runtime;
33
using GameFrameX.Web.Runtime;
44

@@ -14,26 +14,43 @@ private sealed class WebProtoBufData : WebManager.WebData
1414
/// <summary>
1515
/// 获取请求任务的完成源,用于异步操作的控制和结果返回
1616
/// </summary>
17-
public readonly TaskCompletionSource<WebBufferResult> Task;
17+
public TaskCompletionSource<WebBufferResult> Task { get; private set; }
1818

1919
/// <summary>
2020
/// 获取要发送的Protocol Buffer序列化后的字节数组数据
2121
/// </summary>
22-
public readonly byte[] SendData;
22+
public byte[] SendData { get; private set; }
2323

2424
/// <summary>
25-
/// 初始化Web ProtoBuf请求数据
25+
/// 无参构造函数(ReferencePool 需要new约束)
2626
/// </summary>
27-
/// <param name="url">请求URL</param>
28-
/// <param name="sendData">要发送的Protocol Buffer序列化数据</param>
29-
/// <param name="task">请求任务的完成源</param>
30-
/// <param name="userData">用户自定义数据</param>
31-
public WebProtoBufData(string url, byte[] sendData, TaskCompletionSource<WebBufferResult> task, object userData) : base(false, url, userData)
27+
public WebProtoBufData() { }
28+
29+
/// <summary>
30+
/// 创建Web ProtoBuf请求数据
31+
/// </summary>
32+
public static WebProtoBufData Create(string url, byte[] sendData, TaskCompletionSource<WebBufferResult> task, object userData)
3233
{
33-
task.CheckNull(nameof(task));
34-
SendData = sendData;
35-
Task = task;
34+
var data = ReferencePool.Acquire<WebProtoBufData>();
35+
data.URL = url;
36+
data.IsGet = false;
37+
data.UserData = userData;
38+
data.Task = task;
39+
data.SendData = sendData;
40+
return data;
41+
}
42+
43+
public override void Clear()
44+
{
45+
if (Task != null)
46+
{
47+
Task.TrySetCanceled();
48+
Task = null;
49+
}
50+
51+
SendData = null;
52+
base.Clear();
3653
}
3754
}
3855
}
39-
}
56+
}

0 commit comments

Comments
 (0)