|
|
豪气的地瓜 · 【C#】コンパイルが必要な言語はダメらしいの ...· 2 月前 · |
|
|
有情有义的卤蛋 · MAUI .NET 8.0 built ...· 2 月前 · |
|
|
高大的蟠桃 · Serious question ...· 2 月前 · |
|
|
成熟的红薯 · Blazor WASM: "[MONO] ...· 2 月前 · |
|
|
安静的棒棒糖 · Kodu Game Lab fails ...· 2 月前 · |
|
|
完美的双杠 · CMake错误。"add_subdirect ...· 2 年前 · |
|
|
爱旅游的感冒药 · Get count of returned ...· 2 年前 · |
|
|
奔跑的苦咖啡 · 从百度地图批量获取中国县级以上行政区划边界坐 ...· 2 年前 · |
当上游流发出nullValue时,我们可以使用'Mono.defualtIfEmpty()‘或'Mono.switchIfEmpty()’替换空值。
但
switchIfEmpty()
对上层流值的求值非常迫切。因此,我们使用Mono.defer()来进行惰性评估。
发布于 2022-10-09 10:03:54
对于
defaultIfEmpty
,您必须在程序集上提供回退值,因此它必然是迫切的。
由于
switchIfEmpty
使用Mono作为参数,因此可以同时使用它进行热切和懒惰的评估。除了缓存的Mono或Mono.just之外,大多数Mono对象/实现都是延迟评估的。
在任何情况下,无论您选择哪种运算符,都不会急切地评估上游Mono。
仅在订阅时才对上游单点进行评估。
示例1 :验证在订阅之前不会对上游进行评估:
var upstream = Mono.fromCallable(() -> {
System.out.println("UPSTREAM EVALUATION");
return "upstream";
var defaultIfEmpty = upstream.defaultIfEmpty("default");
System.out.println("Nothing evaluated yet");
Thread.sleep(2000);
System.out.println("Still not evaluated");
defaultIfEmpty.block();
输出:
Nothing evaluated yet
Still not evaluated
UPSTREAM EVALUATION
示例2 :检查switchIfEmpty是否仅在上游评估后触发
var upstream = Mono.fromRunnable(() -> System.out.println("UPSTREAM EVALUATION"));
var switchEmpty = upstream.switchIfEmpty(Mono.fromCallable(() -> {
System.out.println("SWITCH EVALUATED");
return "switch";
System.out.println("Nothing evaluated yet");
Thread.sleep(2000);
System.out.println("Still not evaluated");
switchEmpty.block();
输出:
Nothing evaluated yet
Still not evaluated
UPSTREAM EVALUATION
SWITCH EVALUATED
如果上游发送值,则不计算 示例3 :SwitchIfEmpty:
var upstream = Mono.fromCallable(() -> {
System.out.println("UPSTREAM EVALUATION");
return "upstream";
var switchEmpty = upstream.switchIfEmpty(Mono.fromCallable(() -> {
System.out.println("SWITCH EVALUATED");
return "switch";
System.out.println("Nothing evaluated yet");
|
|
有情有义的卤蛋 · MAUI .NET 8.0 built with Full AOT Compilation reports a lot of `Mono : AOT NOT FOUND` · Issue #10 2 月前 |
|
|
高大的蟠桃 · Serious question here, do you even need AOT on iOS? - News & General Discussion - Unity Discussions 2 月前 |
|
|
成熟的红薯 · Blazor WASM: "[MONO] * Assertion at ..., condition `<disabled>' not met" (AGAIN) · Issue #99030 · do 2 月前 |