跳到主要内容

unsafe_ex

简介

本模块提供一些unsafe操作的扩展功能

注意!unsafe操作是不安全的,通常是为了获取性能优势而有意为之,因此使用者必须自己保证安全性。

组件接口

unsafe_ex.gs

函数原型函数作用
mixed async_blocking_call(function func, ...)通过pkg.copool执行一个异步阻塞调用
mixed async_blocking_call_with_timeout(mixed timeout, function func, ...)通过pkg.copool执行一个异步阻塞调用,带超时

UnsafeType

unsafe数据类型

目的是为了数据跨域传递时不产生复制,而代价仅仅是在原始数据套上一个readonly的map外壳

对应的safe数据类型请使用domain_value

成员变量

变量名类型初始值须初始化描述
valuemixednil可选原始数据

成员方法

函数原型函数作用
UnsafeType box(mixed raw_value)将原始数据包装成unsafe_type实例
mixed unbox()获取原始数据

UnsafeFuture

等待处理结果(功能和future.gs相同,但是class map实现,效率更佳)

成员变量

变量名类型初始值须初始化描述
resultmixednil可选
evtsync_objectnil可选
co_handleint0可选

成员方法

函数原型函数作用
mixed wait(mixed wait_time = -1)等待异步处理结果
void notify_result(mixed result = nil)通知结果
mixed get_result()获取结果
void reset()重置

样例


int raw_value = 1;
UnsafeType box_value = UnsafeType.box(raw_value);

int unbox_value = box_value.unbox();

// 测试正常调用
int result = unsafe_ex.async_blocking_call((int a, int b) {
return a + b;
}, 1, 2);

// 测试不超时
mixed result2 = unsafe_ex.async_blocking_call_with_timeout(1, (int a, int b) {
coroutine.sleep(0.1);
return a + b;
}, 1, 2);

// 测试超时
mixed result3 = unsafe_ex.async_blocking_call_with_timeout(0, (int a, int b) {
coroutine.sleep(0.1);
return a + b;
}, 1, 2);