跳转至

GFAsyncKeyedGate

API Reference / Standard / 类索引

  • 路径:addons/gf/standard/common/gf_async_keyed_gate.gd
  • 模块:Standard
  • 继承:RefCounted
  • API:public
  • 类别:运行时句柄 (runtime_handle)
  • 首次版本:7.0.0

按 key 仲裁异步并发槽位。 用于把“同一个资源、槽位、存档、玩家或编辑器目标”的异步操作限制在可控并发内。 gate 只负责排队、发放租约、释放后推进队列,以及记录取消/超时诊断; 不创建线程、不执行任务,也不解释 key 的业务含义。

成员概览

类型 名称 签名
信号 request_queued signal request_queued(request_id: int, key: Variant, metadata: Dictionary)
信号 lease_acquired signal lease_acquired(lease: GFAsyncGateLease)
信号 lease_released signal lease_released(lease: GFAsyncGateLease, reason: StringName)
信号 request_cancelled signal request_cancelled(request_id: int, key: Variant, reason: StringName, metadata: Dictionary)
信号 request_timed_out signal request_timed_out(request_id: int, key: Variant, metadata: Dictionary)
常量 STATUS_ACQUIRED const STATUS_ACQUIRED: StringName = &"acquired"
常量 STATUS_QUEUED const STATUS_QUEUED: StringName = &"queued"
常量 STATUS_RELEASED const STATUS_RELEASED: StringName = &"released"
常量 STATUS_CANCELLED const STATUS_CANCELLED: StringName = &"cancelled"
常量 STATUS_TIMEOUT const STATUS_TIMEOUT: StringName = &"timeout"
常量 STATUS_INVALID const STATUS_INVALID: StringName = &"invalid"
常量 DEFAULT_MAX_CONCURRENCY const DEFAULT_MAX_CONCURRENCY: int = 1
常量 DEFAULT_MAX_RECENT_EVENTS const DEFAULT_MAX_RECENT_EVENTS: int = 64
属性 default_max_concurrency var default_max_concurrency: int = DEFAULT_MAX_CONCURRENCY:
属性 max_recent_events var max_recent_events: int = DEFAULT_MAX_RECENT_EVENTS:
方法 request_lease func request_lease(key: Variant, options: Dictionary = {}) -> Dictionary:
方法 wait_for_lease_async func wait_for_lease_async(key: Variant, options: Dictionary = {}) -> GFAsyncGateLease:
方法 release_lease func release_lease(lease: GFAsyncGateLease, reason: StringName = &"manual") -> bool:
方法 cancel_request func cancel_request(request_id: int, reason: StringName = STATUS_CANCELLED, metadata: Dictionary = {}) -> bool:
方法 clear func clear(reason: StringName = &"cleared", metadata: Dictionary = {}) -> int:
方法 set_key_max_concurrency func set_key_max_concurrency(key: Variant, max_concurrency: int) -> int:
方法 get_key_max_concurrency func get_key_max_concurrency(key: Variant) -> int:
方法 expire_waiting_requests func expire_waiting_requests(now_msec: int = -1) -> int:
方法 expire_active_leases func expire_active_leases(now_msec: int = -1) -> int:
方法 has_key_activity func has_key_activity(key: Variant) -> bool:
方法 get_key_snapshot func get_key_snapshot(key: Variant) -> Dictionary:
方法 get_recent_events func get_recent_events() -> Array[Dictionary]:
方法 get_debug_snapshot func get_debug_snapshot() -> Dictionary:

信号

request_queued

  • API:public
  • 首次版本:7.0.0
signal request_queued(request_id: int, key: Variant, metadata: Dictionary)

请求进入等待队列时发出。

参数:

名称 说明
request_id gate 内唯一请求 ID。
key 请求 key 副本。
metadata 请求元数据。

结构:

  • key: Variant,调用方传入的 key。
  • metadata: Dictionary,调用方定义的请求上下文。

lease_acquired

  • API:public
  • 首次版本:7.0.0
signal lease_acquired(lease: GFAsyncGateLease)

请求获得租约时发出。

参数:

名称 说明
lease 获得的租约句柄。

lease_released

  • API:public
  • 首次版本:7.0.0
signal lease_released(lease: GFAsyncGateLease, reason: StringName)

租约释放时发出。

参数:

名称 说明
lease 被释放的租约句柄。
reason 稳定释放原因。

request_cancelled

  • API:public
  • 首次版本:7.0.0
signal request_cancelled(request_id: int, key: Variant, reason: StringName, metadata: Dictionary)

等待请求取消时发出。

参数:

名称 说明
request_id gate 内唯一请求 ID。
key 请求 key 副本。
reason 稳定取消原因。
metadata 取消上下文。

结构:

  • key: Variant,调用方传入的 key。
  • metadata: Dictionary,包含取消上下文。

request_timed_out

  • API:public
  • 首次版本:7.0.0
signal request_timed_out(request_id: int, key: Variant, metadata: Dictionary)

等待请求超时时发出。

参数:

名称 说明
request_id gate 内唯一请求 ID。
key 请求 key 副本。
metadata 超时上下文。

结构:

  • key: Variant,调用方传入的 key。
  • metadata: Dictionary,包含超时上下文。

常量

STATUS_ACQUIRED

  • API:public
  • 首次版本:7.0.0
const STATUS_ACQUIRED: StringName = &"acquired"

请求已获得租约。

STATUS_QUEUED

  • API:public
  • 首次版本:7.0.0
const STATUS_QUEUED: StringName = &"queued"

请求已进入队列。

STATUS_RELEASED

  • API:public
  • 首次版本:7.0.0
const STATUS_RELEASED: StringName = &"released"

租约已释放。

STATUS_CANCELLED

  • API:public
  • 首次版本:7.0.0
const STATUS_CANCELLED: StringName = &"cancelled"

请求已取消。

STATUS_TIMEOUT

  • API:public
  • 首次版本:7.0.0
const STATUS_TIMEOUT: StringName = &"timeout"

请求等待超时。

STATUS_INVALID

  • API:public
  • 首次版本:7.0.0
const STATUS_INVALID: StringName = &"invalid"

请求无效。

DEFAULT_MAX_CONCURRENCY

  • API:public
  • 首次版本:7.0.0
const DEFAULT_MAX_CONCURRENCY: int = 1

默认每个 key 的并发槽位数。

DEFAULT_MAX_RECENT_EVENTS

  • API:public
  • 首次版本:7.0.0
const DEFAULT_MAX_RECENT_EVENTS: int = 64

默认保留的最近事件数量。

属性

default_max_concurrency

  • API:public
  • 首次版本:7.0.0
var default_max_concurrency: int = DEFAULT_MAX_CONCURRENCY:

未显式配置 key 时的最大并发槽位数。

max_recent_events

  • API:public
  • 首次版本:7.0.0
var max_recent_events: int = DEFAULT_MAX_RECENT_EVENTS:

最近事件历史上限。设置为 0 时不保留事件。

方法

request_lease

  • API:public
  • 首次版本:7.0.0
func request_lease(key: Variant, options: Dictionary = {}) -> Dictionary:

请求一个 key 的执行租约。 如果当前 key 仍有并发槽位,会立即返回 acquired;否则返回 queued,并在 result 中提供 GFAsyncCompletion。队列推进后 completion 会成功并携带 lease。

参数:

名称 说明
key 并发仲裁 key。
options 请求选项,支持 metadata、max_concurrency、timeout_msec、lease_timeout_msec 和 cancel_token。

返回:请求结果字典。

结构:

  • key: Variant,建议使用 String、StringName、int 或可稳定 var_to_str() 的纯数据值。
  • options: Dictionary,可包含 metadata: Dictionary、max_concurrency: int、timeout_msec: int、lease_timeout_msec: int、cancel_token: GFCancelToken。
  • return: Dictionary,包含 ok、status、queued、acquired、request_id、key、lease、completion、metadata 和 reason。

wait_for_lease_async

  • API:public
  • 首次版本:7.0.0
func wait_for_lease_async(key: Variant, options: Dictionary = {}) -> GFAsyncGateLease:

等待并返回租约。

参数:

名称 说明
key 并发仲裁 key。
options 请求选项;wait_options 会传给 GFAsyncCompletion.wait_async()。

返回:获得的租约;取消、超时或失效时返回 null。

结构:

  • key: Variant,建议使用 String、StringName、int 或可稳定 var_to_str() 的纯数据值。
  • options: Dictionary,支持 request_lease() 选项,并可包含 wait_options: Dictionary。

release_lease

  • API:public
  • 首次版本:7.0.0
func release_lease(lease: GFAsyncGateLease, reason: StringName = &"manual") -> bool:

释放一个租约。

参数:

名称 说明
lease request_lease() 或 wait_for_lease_async() 返回的租约。
reason 稳定释放原因。

返回:首次释放成功时返回 true。

cancel_request

  • API:public
  • 首次版本:7.0.0
func cancel_request(request_id: int, reason: StringName = STATUS_CANCELLED, metadata: Dictionary = {}) -> bool:

取消一个仍在等待队列中的请求。

参数:

名称 说明
request_id request_lease() 返回的请求 ID。
reason 稳定取消原因。
metadata 取消上下文。

返回:找到并取消等待请求时返回 true。

结构:

  • metadata: Dictionary,调用方定义的取消上下文。

clear

  • API:public
  • 首次版本:7.0.0
func clear(reason: StringName = &"cleared", metadata: Dictionary = {}) -> int:

取消全部等待请求并释放全部活跃租约。

参数:

名称 说明
reason 稳定清理原因。
metadata 清理上下文。

返回:受影响的请求和租约数量。

结构:

  • metadata: Dictionary,调用方定义的清理上下文。

set_key_max_concurrency

  • API:public
  • 首次版本:7.0.0
func set_key_max_concurrency(key: Variant, max_concurrency: int) -> int:

设置某个 key 的最大并发槽位数。

参数:

名称 说明
key 并发仲裁 key。
max_concurrency 最大并发槽位数;小于 1 时按 1 处理。

返回:归一化后的并发槽位数。

结构:

  • key: Variant,调用方传入的 key。

get_key_max_concurrency

  • API:public
  • 首次版本:7.0.0
func get_key_max_concurrency(key: Variant) -> int:

获取某个 key 的最大并发槽位数。

参数:

名称 说明
key 并发仲裁 key。

返回:当前 key 的最大并发槽位数。

结构:

  • key: Variant,调用方传入的 key。

expire_waiting_requests

  • API:public
  • 首次版本:7.0.0
func expire_waiting_requests(now_msec: int = -1) -> int:

过期等待队列中已取消或超时的请求。 该方法不会创建计时器;适合由调用方在帧循环、工具刷新或关键操作边界显式调用。

参数:

名称 说明
now_msec 参考时间;小于 0 时使用 Time.get_ticks_msec()。

返回:本次过期的等待请求数量。

expire_active_leases

  • API:public
  • 首次版本:7.0.0
func expire_active_leases(now_msec: int = -1) -> int:

释放已超过 lease_timeout_msec 的活跃租约。

参数:

名称 说明
now_msec 参考时间;小于 0 时使用 Time.get_ticks_msec()。

返回:本次释放的活跃租约数量。

has_key_activity

  • API:public
  • 首次版本:7.0.0
func has_key_activity(key: Variant) -> bool:

判断某个 key 当前是否存在等待或活跃租约。

参数:

名称 说明
key 并发仲裁 key。

返回:存在等待请求或活跃租约时返回 true。

结构:

  • key: Variant,调用方传入的 key。

get_key_snapshot

  • API:public
  • 首次版本:7.0.0
func get_key_snapshot(key: Variant) -> Dictionary:

获取某个 key 的状态快照。

参数:

名称 说明
key 并发仲裁 key。

返回:key 状态快照。

结构:

  • key: Variant,调用方传入的 key。
  • return: Dictionary,包含 key、queued_count、active_count、max_concurrency、waiting_request_ids、active_lease_ids 和 metadata。

get_recent_events

  • API:public
  • 首次版本:7.0.0
func get_recent_events() -> Array[Dictionary]:

获取最近 gate 事件。

返回:最近事件数组。

结构:

  • return: Array[Dictionary],每个元素包含 event_index、event_type、request_id、lease_id、key、reason 和 timestamp_msec。

get_debug_snapshot

  • API:public
  • 首次版本:7.0.0
func get_debug_snapshot() -> Dictionary:

获取 gate 调试快照。

返回:gate 状态快照。

结构:

  • return: Dictionary,包含 queued_count、active_count、key_count、acquired_count、released_count、cancelled_count、timeout_count、keys 和 recent_events。