import com.m8test.script.GlobalVariables.*
/*
* 完整示例 7.1: 演示超时处理
*/
// --- 样板代码 ---
_threads.getMain().setBackground(true)
val scope = _coroutines.newScope(null)
// 案例 1: withTimeout,将会失败
_console.log("测试 withTimeout (预期会失败)...")
scope.withTimeout(500) {
// 这个任务需要 1 秒,但超时只有 500 毫秒
// 注意: withTimeout 的 block 是 CoroutineScope.() -> T,所以可以直接调用 delay
delay(1000).then { innerScope, _ ->
innerScope.resolve("这个结果永远不会返回")
}
}.then { s, r ->
_console.log("withTimeout(预期会失败): 这个应该不会打印", r)
s.resolve(null)
}.onError { error ->
_console.error("withTimeout(预期失败)成功捕获到超时异常")
}
// 案例 2: withTimeout,将会成功
scope.delay(2000).then { s1, _ ->
_console.log("测试 withTimeout (预期会成功)...")
// 这里使用了外部的 scope,也可以使用 s1
scope.withTimeout(500) {
// 这个任务需要 100 毫秒,超时有 500 毫秒
delay(100).then { innerScope, u ->
innerScope.resolve("这个结果会返回")
}
}
}.then { s, r ->
_console.log("withTimeout(预期会成功): 这个应该会打印", r)
s.resolve(null)
}.onError { error ->
_console.error("成功捕获到超时异常: " + error)
}
// 案例 3: withTimeoutOrNull,将会返回 null
scope.delay(3000).then { s, _ ->
_console.log("\n测试 withTimeoutOrNull (预期返回 null)...")
s.withTimeoutOrNull(500) {
// 这里的 this 是新的 CoroutineScope
delay(1000).then { innerS, u ->
innerS.resolve("这个结果也永远不会返回")
}
}
}.then { innerS, result ->
val msg = if (result == null) "null (符合预期)" else result
_console.log("withTimeoutOrNull(预期失败) 的结果是: " + msg)
innerS.resolve(null)
}
// 案例 4: withTimeoutOrNull,会返回给定的数据
scope.delay(4000).then { s, _ ->
_console.log("\n测试 withTimeoutOrNull (预期返回给定的数据)...")
s.withTimeoutOrNull(500) {
delay(100).then { innerS, u ->
innerS.resolve("这个结果会返回")
}
}
}.then { innerS, result ->
val msg = if (result == null) "null (符合预期)" else result
_console.log("withTimeoutOrNull(预期成功) 的结果是: " + msg)
innerS.resolve(null)
}
/*
* 完整示例 7.1: 演示超时处理
*/
// --- 样板代码 ---
$threads.getMain().setBackground(true)
def scope = $coroutines.newScope(null)
// 案例 1: withTimeout,将会失败
$console.log("测试 withTimeout (预期会失败)...")
scope.withTimeout(500, { s ->
// 这个任务需要 1 秒,但超时只有 500 毫秒
return s.delay(1000).then({ innerScope, _ ->
return innerScope.resolve("这个结果永远不会返回")
})
}).then { s, r ->
$console.log("withTimeout(预期会失败): 这个应该不会打印", r)
return s.resolve(null)
}.onError({ error ->
$console.error("withTimeout(预期失败)成功捕获到超时异常")
})
// 案例 2: withTimeout,将会成功
scope.delay(2000).then({ s1, _ ->
$console.log("测试 withTimeout (预期会成功)...")
return scope.withTimeout(500, { s ->
// 这个任务需要 100 毫秒,超时有 500 毫秒
return s.delay(100).then({ innerScope, u ->
return innerScope.resolve("这个结果会返回")
})
})
}).then { s, r ->
$console.log("withTimeout(预期会成功): 这个应该会打印", r)
return s.resolve(null)
}.onError({ error ->
$console.error("成功捕获到超时异常: " + error.stackTraceToString())
})
// 案例 3: withTimeoutOrNull,将会返回 null
scope.delay(3000).then({ s, _ ->
$console.log("\n测试 withTimeoutOrNull (预期返回 null)...")
return s.withTimeoutOrNull(500, { innerS ->
return innerS.delay(1000).then({ s1, u ->
return innerS.resolve("这个结果也永远不会返回")
})
})
}).then({ innerS, result ->
$console.log("withTimeoutOrNull(预期失败) 的结果是: " + (result == null ? "null (符合预期)" : result))
return innerS.resolve(null)
})
// 案例 4: withTimeoutOrNull,会返回给定的数据
scope.delay(4000).then({ s, _ ->
$console.log("\n测试 withTimeoutOrNull (预期返回给定的数据)...")
return s.withTimeoutOrNull(500, { innerS ->
return innerS.delay(100).then({ s1, u ->
return innerS.resolve("这个结果会返回")
})
})
}).then({ innerS, result ->
$console.log("withTimeoutOrNull(预期成功) 的结果是: " + (result == null ? "null (符合预期)" : result))
return innerS.resolve(null)
})
/*
* 完整示例 7.1: 演示超时处理
*/
// --- 样板代码 ---
$threads.getMain().setBackground(true);
const scope = $coroutines.newScope(null);
// 案例 1: withTimeout,将会失败
$console.log("测试 withTimeout (预期会失败)...");
scope.withTimeout(500, s => {
// 这个任务需要 1 秒,但超时只有 500 毫秒
return s.delay(1000).then((innerScope, _) => {
return innerScope.resolve("这个结果永远不会返回");
});
}).then((s, r) => {
$console.log("withTimeout(预期会失败): 这个应该不会打印", r);
return s.resolve(null);
}).onError(error => {
$console.error("withTimeout(预期失败)成功捕获到超时异常");
});
// 案例 2: withTimeout,将会成功
scope.delay(2000).then((s1, _) => {
$console.log("测试 withTimeout (预期会成功)...");
return scope.withTimeout(500, s => {
// 这个任务需要 100 毫秒,超时有 500 毫秒
return s.delay(100).then((innerScope, u) => {
return innerScope.resolve("这个结果会返回");
});
});
}).then((s, r) => {
$console.log("withTimeout(预期会成功): 这个应该会打印", r);
return s.resolve(null);
}).onError(error => {
$console.error("成功捕获到超时异常: " + error.stackTraceToString());
});
// 案例 3: withTimeoutOrNull,将会返回 null
scope.delay(3000).then((s, _) => {
$console.log("\n测试 withTimeoutOrNull (预期返回 null)...");
return s.withTimeoutOrNull(500, innerS => {
return innerS.delay(1000).then((s1, u) => {
return innerS.resolve("这个结果也永远不会返回");
});
});
}).then((innerS, result) => {
$console.log("withTimeoutOrNull(预期失败) 的结果是: " + (result == null ? "null (符合预期)" : result));
return innerS.resolve(null);
});
// 案例 4: withTimeoutOrNull,会返回给定的数据
scope.delay(4000).then((s, _) => {
$console.log("\n测试 withTimeoutOrNull (预期返回给定的数据)...");
return s.withTimeoutOrNull(500, innerS => {
return innerS.delay(100).then((s1, u) => {
return innerS.resolve("这个结果会返回");
});
});
}).then((innerS, result) => {
$console.log("withTimeoutOrNull(预期成功) 的结果是: " + (result == null ? "null (符合预期)" : result));
return innerS.resolve(null);
});
--[[
* 完整示例 7.1: 演示超时处理
]]
-- --- 样板代码 ---
_threads:getMain():setBackground(true)
local scope = _coroutines:newScope(nil)
-- 案例 1: withTimeout,将会失败
_console:log("测试 withTimeout (预期会失败)...")
scope:withTimeout(500, function(s)
-- 这个任务需要 1 秒,但超时只有 500 毫秒
return s:delay(1000):_then(function(innerScope, _)
return innerScope:resolve("这个结果永远不会返回")
end)
end):_then(function(s, r)
_console:log("withTimeout(预期会失败): 这个应该不会打印", r)
return s:resolve(nil)
end):onError(function(error)
_console:error("withTimeout(预期失败)成功捕获到超时异常")
end)
-- 案例 2: withTimeout,将会成功
scope:delay(2000):_then(function(s1, _)
_console:log("测试 withTimeout (预期会成功)...")
return scope:withTimeout(500, function(s)
-- 这个任务需要 100 毫秒,超时有 500 毫秒
return s:delay(100):_then(function(innerScope, u)
return innerScope:resolve("这个结果会返回")
end)
end)
end):_then(function(s, r)
_console:log("withTimeout(预期会成功): 这个应该会打印", r)
return s:resolve(nil)
end):onError(function(error)
_console:error("成功捕获到超时异常: " .. error:stackTraceToString())
end)
-- 案例 3: withTimeoutOrNull,将会返回 null
scope:delay(3000):_then(function(s, _)
_console:log("\n测试 withTimeoutOrNull (预期返回 null)...")
return s:withTimeoutOrNull(500, function(innerS)
return innerS:delay(1000):_then(function(s1, u)
return innerS:resolve("这个结果也永远不会返回")
end)
end)
end):_then(function(innerS, result)
_console:log("withTimeoutOrNull(预期失败) 的结果是: " .. (result == nil and "null (符合预期)" or result))
return innerS:resolve(nil)
end)
-- 案例 4: withTimeoutOrNull,会返回给定的数据
scope:delay(4000):_then(function(s, _)
_console:log("\n测试 withTimeoutOrNull (预期返回给定的数据)...")
return s:withTimeoutOrNull(500, function(innerS)
return innerS:delay(100):_then(function(s1, u)
return innerS:resolve("这个结果会返回")
end)
end)
end):_then(function(innerS, result)
_console:log("withTimeoutOrNull(预期成功) 的结果是: " .. (result == nil and "null (符合预期)" or result))
return innerS:resolve(nil)
end)
<?php
/** @var m8test_java\com\m8test\script\core\api\thread\Threads $threads */
global $threads;
/** @var m8test_java\com\m8test\script\core\api\coroutines\Coroutines $coroutines */
global $coroutines;
/** @var m8test_java\com\m8test\script\core\api\console\Console $console */
global $console;
/*
* 完整示例 7.1: 演示超时处理
*/
// --- 样板代码 ---
$threads->getMain()->setBackground(true);
$scope = $coroutines->newScope(function ($context) {
$context->setDispatcher(function ($dispatchers) {
return $dispatchers->getScriptMain();
});
});
// 案例 1: withTimeo<?php
///** @var m8test_java\com\m8test\script\core\api\thread\Threads $threads */
//global $threads;
///** @var m8test_java\com\m8test\script\core\api\coroutines\Coroutines $coroutines */
//global $coroutines;
///** @var m8test_java\com\m8test\script\core\api\console\Console $console */
//global $console;
//
///*
// * 完整示例 7.1: 演示超时处理
// */
//
//// --- 样板代码 ---
//$threads->getMain()->setBackground(true);
//$scope = $coroutines->newScope(function ($context) {
// $context->setDispatcher(function ($dispatchers) {
// return $dispatchers->getScriptMain();
// });
//});
//
//// 案例 1: withTimeout,将会失败
//$console->log(javaString("测试 withTimeout (预期会失败)..."));
//$scope->withTimeout(500, function ($s) {
// // 这个任务需要 1 秒,但超时只有 500 毫秒
// return $s->delay(1000)->then(function ($innerScope, $_) {
// return $innerScope->resolve(javaString("这个结果永远不会返回"));
// });
//})->then(function ($s, $r) {
// global $console;
// $console->log(javaString("withTimeout(预期会失败): 这个应该不会打印"), $r);
// return $s->resolve(null);
//})->onError(function ($error) {
// global $console;
// $console->error(javaString("withTimeout(预期失败)成功捕获到超时异常"));
//});
//
//// 案例 2: withTimeout,将会成功
//$scope->delay(2000)->then(function ($s1, $_) use ($scope) {
// global $console;
// $console->log(javaString("测试 withTimeout (预期会成功)..."));
// return $scope->withTimeout(500, function ($s) {
// // 这个任务需要 100 毫秒,超时有 500 毫秒
// return $s->delay(100)->then(function ($innerScope, $u) {
// return $innerScope->resolve(javaString("这个结果会返回"));
// });
// });
//})->then(function ($s, $r) {
// global $console;
// $console->log(javaString("withTimeout(预期会成功): 这个应该会打印"), $r);
// return $s->resolve(null);
//})->onError(function ($error) {
// global $console;
// $console->error(javaString("成功捕获到超时异常: " . $error->stackTraceToString()));
//});
//
//// 案例 3: withTimeoutOrNull,将会返回 null
//$scope->delay(3000)->then(function ($s, $_) {
// global $console;
// $console->log(javaString("\n测试 withTimeoutOrNull (预期返回 null)..."));
// return $s->withTimeoutOrNull(500, function ($innerS) {
// return $innerS->delay(1000)->then(function ($s1, $u) use ($innerS) {
// return $innerS->resolve(javaString("这个结果也永远不会返回"));
// });
// });
//})->then(function ($innerS, $result) {
// global $console;
// $console->log(javaString("withTimeoutOrNull(预期失败) 的结果是: " . ($result == null ? javaString("null (符合预期)") : $result)));
// return $innerS->resolve(null);
//});
//
//// 案例 4: withTimeoutOrNull,会返回给定的数据
//$scope->delay(4000)->then(function ($s, $_) {
// global $console;
// $console->log(javaString("\n测试 withTimeoutOrNull (预期返回给定的数据)..."));
// return $s->withTimeoutOrNull(500, function ($innerS) {
// return $innerS->delay(100)->then(function ($s1, $u) use ($innerS) {
// return $innerS->resolve(javaString("这个结果会返回"));
// });
// });
//})->then(function ($innerS, $result) {
// global $console;
// $console->log(javaString("withTimeoutOrNull(预期成功) 的结果是: " . ($result == null ? javaString("null (符合预期)") : $result)));
// return $innerS->resolve(null);
//});ut,将会失败
$console->log(javaString("测试 withTimeout (预期会失败)..."));
$scope->withTimeout(500, function ($s) {
// 这个任务需要 1 秒,但超时只有 500 毫秒
return $s->delay(1000)->then(function ($innerScope, $_) {
return $innerScope->resolve(javaString("这个结果永远不会返回"));
});
})
->then(function ($s, $r) {
global $console;
$console->log(javaString("这个应该不会打印"));
})
->onError(function ($error) {
global $console;
$console->error(javaString("成功捕获到超时异常: ") . $error->getOrigin()->getClass()->getName());
});
// 案例 2: withTimeoutOrNull,将会返回 null
$scope->delay(1500)->then(function ($s, $_) {
global $console;
$console->log(javaString("\n测试 withTimeoutOrNull (预期返回 null)..."));
return $s->withTimeoutOrNull(500, function ($innerS) {
return $innerS->delay(1000)->then(function ($s1, $u) use ($innerS) {
return $innerS->resolve(javaString("这个结果也永远不会返回"));
});
})->then(function ($innerS, $result) {
global $console;
$console->log(javaString("withTimeoutOrNull 的结果是: ") . ($result == null ? javaString("null (符合预期)") : $result));
return $innerS->resolve(null);
});
});
#
# 完整示例 7.1: 演示超时处理
#
# --- 样板代码 ---
# 导入所需的全局变量
from m8test_java.com.m8test.script.GlobalVariables import _threads
from m8test_java.com.m8test.script.GlobalVariables import _coroutines
from m8test_java.com.m8test.script.GlobalVariables import _console
_threads.getMain().setBackground(True)
# 使用您指定的 scope 创建方式
scope = _coroutines.newScope(lambda it: it.setDispatcher(lambda d: d.getScriptMain()))
# 案例 1: withTimeout,将会失败
_console.log("测试 withTimeout (预期会失败)...")
scope.withTimeout(500, lambda s:
# 这个任务需要 1 秒,但超时只有 500 毫秒
s.delay(1000).then(lambda innerScope, _:
innerScope.resolve("这个结果永远不会返回")
)
).then(lambda s, r: (
_console.log("withTimeout(预期会失败): 这个应该不会打印", r),
s.resolve(None)
)[-1]).onError(lambda error:
_console.error("withTimeout(预期失败)成功捕获到超时异常")
)
# 案例 2: withTimeout,将会成功
scope.delay(2000).then(lambda s1, _: (
_console.log("测试 withTimeout (预期会成功)..."),
# 此 lambda 只有一个返回表达式,所以直接返回
scope.withTimeout(500, lambda s:
# 这个任务需要 100 毫秒,超时有 500 毫秒
s.delay(100).then(lambda innerScope, u:
innerScope.resolve("这个结果会返回")
)
)
)[-1]).then(lambda s, r: (
_console.log("withTimeout(预期会成功): 这个应该会打印", r),
s.resolve(None)
)[-1]).onError(lambda error:
_console.error("成功捕获到超时异常: " + str(error.stackTraceToString()))
)
# 案例 3: withTimeoutOrNull,将会返回 null
scope.delay(3000).then(lambda s, _: (
_console.log("\n测试 withTimeoutOrNull (预期返回 null)..."),
s.withTimeoutOrNull(500, lambda innerS:
innerS.delay(1000).then(lambda s1, u:
innerS.resolve("这个结果也永远不会返回")
)
)
)[-1]).then(lambda innerS, result: (
# Groovy的 (result == null ? "..." : result) 转换为Python的条件表达式
_console.log("withTimeoutOrNull(预期失败) 的结果是: " + ("null (符合预期)" if result is None else str(result))),
innerS.resolve(None)
)[-1])
# 案例 4: withTimeoutOrNull,会返回给定的数据
scope.delay(4000).then(lambda s, _: (
_console.log("\n测试 withTimeoutOrNull (预期返回给定的数据)..."),
s.withTimeoutOrNull(500, lambda innerS:
innerS.delay(100).then(lambda s1, u:
innerS.resolve("这个结果会返回")
)
)
)[-1]).then(lambda innerS, result: (
_console.log("withTimeoutOrNull(预期成功) 的结果是: " + ("null (符合预期)" if result is None else str(result))),
innerS.resolve(None)
)[-1])
# encoding: utf-8
# 如果源代码中包含中文,那么就需要添加上面的编码语句
#
# 完整示例 7.1: 演示超时处理
#
# --- 样板代码 ---
$threads.getMain().setBackground(true)
scope = $coroutines.newScope(nil)
# 案例 1: withTimeout,将会失败
$console.log("测试 withTimeout (预期会失败)...")
scope.withTimeout(500) do |s|
# 这个任务需要 1 秒,但超时只有 500 毫秒
s.delay(1000).then do |innerScope, _it|
innerScope.resolve("这个结果永远不会返回")
end
end.then do |s, r|
$console.log("withTimeout(预期会失败): 这个应该不会打印", r)
s.resolve(nil)
end.onError do |error|
$console.error("withTimeout(预期失败)成功捕获到超时异常")
end
# 案例 2: withTimeout,将会成功
scope.delay(2000).then do |s1, _it|
$console.log("测试 withTimeout (预期会成功)...")
scope.withTimeout(500) do |s|
# 这个任务需要 100 毫秒,超时有 500 毫秒
s.delay(100).then do |innerScope, u|
innerScope.resolve("这个结果会返回")
end
end
end.then do |s, r|
$console.log("withTimeout(预期会成功): 这个应该会打印", r)
s.resolve(nil)
end.onError do |error|
$console.error("成功捕获到超时异常: " + error.stackTraceToString())
end
# 案例 3: withTimeoutOrNull,将会返回 null
scope.delay(3000).then do |s, _it|
$console.log("\n测试 withTimeoutOrNull (预期返回 null)...")
s.withTimeoutOrNull(500) do |innerS|
innerS.delay(1000).then do |s1, u|
innerS.resolve("这个结果也永远不会返回")
end
end
end.then do |innerS, result|
$console.log("withTimeoutOrNull(预期失败) 的结果是: " + (result.nil? ? "null (符合预期)" : result.to_s))
innerS.resolve(nil)
end
# 案例 4: withTimeoutOrNull,会返回给定的数据
scope.delay(4000).then do |s, _it|
$console.log("\n测试 withTimeoutOrNull (预期返回给定的数据)...")
s.withTimeoutOrNull(500) do |innerS|
innerS.delay(100).then do |s1, u|
innerS.resolve("这个结果会返回")
end
end
end.then do |innerS, result|
$console.log("withTimeoutOrNull(预期成功) 的结果是: " + (result.nil? ? "null (符合预期)" : result.to_s))
innerS.resolve(nil)
end