reactivex.Observable 超时问题

embedded/2024/11/29 22:53:32/

下面代码测试可知:超时设置需要在map之后才有效,换句话说就是,超时只对超时设置之前的代码有用 

import io.reactivex.Observable;
import java.util.concurrent.TimeUnit;public class TimeoutTest {public static void main(String[] args) throws InterruptedException {TimeoutTest test = new TimeoutTest();System.out.println("=== 测试超时任务 ===");test.testTimeout();System.out.println("\n=== 测试正常任务 ===");test.testNormal();System.out.println("\n=== 测试长任务 ===");test.testLongTask();// 确保主线程不退出Thread.sleep(5000);}// 测试超时任务public void testTimeout() {Observable.create(emitter -> {System.out.println("超时任务模拟:执行开始...");
//                        Thread.sleep(2000); // 模拟超长时间任务(超过1秒)emitter.onNext("任务完成");emitter.onComplete();}).map(s->{Thread.sleep(4000); // 模拟超长时间任务(超过1秒)System.out.println("处理s0!");return s + "x";}).timeout(3, TimeUnit.SECONDS) // 设置超时时间为1秒.onErrorResumeNext(throwable -> {if (throwable instanceof java.util.concurrent.TimeoutException) {System.out.println("任务处理超时:跳过当前任务!");} else {System.err.println("任务发生其他异常:" + throwable.getMessage());}return Observable.empty(); // 返回空的Observable,继续处理其他任务}).subscribe(result -> System.out.println("结果: " + result),throwable -> System.err.println("订阅时异常: " + throwable.getMessage()),() -> System.out.println("任务已完成"));}// 测试正常任务public void testNormal() {Observable.create(emitter -> {System.out.println("正常任务模拟:执行开始...");Thread.sleep(500); // 模拟快速任务(小于1秒)emitter.onNext("任务完成");emitter.onComplete();}).timeout(1, TimeUnit.SECONDS) // 设置超时时间为1秒.onErrorResumeNext(throwable -> {System.err.println("任务超时或其他异常:" + throwable.getMessage());return Observable.empty();}).subscribe(result -> System.out.println("结果: " + result),throwable -> System.err.println("订阅时异常: " + throwable.getMessage()),() -> System.out.println("任务已完成"));}// 测试长时间任务public void testLongTask() {Observable.create(emitter -> {System.out.println("长时间任务模拟:执行开始...");for (int i = 0; i < 5; i++) {System.out.println("任务进行中: Step " + (i + 1));Thread.sleep(600); // 模拟分段任务,每次处理600msemitter.onNext("Step " + (i + 1));}emitter.onComplete();}).timeout(1, TimeUnit.SECONDS) // 设置超时时间为1秒.onErrorResumeNext(throwable -> {if (throwable instanceof java.util.concurrent.TimeoutException) {System.out.println("任务处理超时:跳过当前任务!");} else {System.err.println("任务发生其他异常:" + throwable.getMessage());}return Observable.empty(); // 返回空的Observable,继续处理其他任务}).subscribe(result -> System.out.println("结果: " + result),throwable -> System.err.println("订阅时异常: " + throwable.getMessage()),() -> System.out.println("任务已完成"));}
}


http://www.ppmy.cn/embedded/141590.html

相关文章

网络安全——SpringBoot配置文件明文加密

一、前言 在日常开发中&#xff0c;项目中会有很多配置文件。比如SpringBoot项目核心的数据库配置、Redis账号密码配置都在properties、yml配置文件 中。 如果这些信息以明文的方式存储&#xff0c;你的电脑被拿去修理&#xff0c;就会容易泄露&#xff0c;一旦被其他人获取到…

JVM:即时编译器,C2 Compiler,堆外内存排查

1&#xff0c;即时编译器 1.1&#xff0c;基本概念 常见的编译型语言如C&#xff0c;通常会把代码直接编译成CPU所能理解的机器码来运行。而Java为了实现“一次编译&#xff0c;处处运行”的特性&#xff0c;把编译的过程分成两部分&#xff0c;首先它会先由javac编译成通用的…

如何利用ArcGIS探究环境和生态因子对水体、土壤和大气污染物的影响?

原文&#xff1a;如何利用ArcGIS探究环境和生态因子对水体、土壤和大气污染物的影响&#xff1f;https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247630247&idx8&sn2debedc63a42cfd24ed4c8afbb8c575d&chksmfa8dbc40cdfa3556dc0ec660d00fcd7e8c9a9ca75a8…

泷羽sec-基础之html 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

IDEA敲Web前端快捷键

1.html基础格式 英文符号TAB键 <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, mini…

RSTP与MSTP实验

配置RSTP、MSTP打破二层环路&#xff0c;同时手动指定根桥、备份根桥 为避免环路问题&#xff0c;在网络中部署RSTP。所有的VLAN共享一颗STP生成树&#xff0c;为了实现VLAN间数据流量的负载均衡&#xff0c;在网络中部署MSTP 实验任务 开启STP&#xff0c;修改STP模式为RSTP手…

AIGC时代:如何快速搞定Spring Boot+Vue全栈开发

文章目录 一、Spring Boot基础二、Vue.js基础三、Spring Boot与Vue.js集成四、性能优化与最佳实践《快速搞定Spring BootVue全栈开发》内容简介作者简介目录前言/序言本书内容本书特点读者对象 随着人工智能生成内容&#xff08;AIGC&#xff09;技术的迅速发展&#xff0c;内容…

简单的TCPSocket客户端使用案例(已入OPCommon)

做一个实体操作工具类&#xff08;包含&#xff09; public delegate void TcpClientReceivedEventHandler(TcpClientStateEventArgs args);public class TCPSocketClient{ //接收委托public event TcpClientReceivedEventHandler TcpReceived;private CancellationTokenSour…