reactivex.Observable 超时问题

server/2024/12/3 3:25:24/

下面代码测试可知:超时设置需要在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/server/146915.html

相关文章

Fortran mpi在Linux的安装

最近编译一个程序需要需要 Fortran mpi 编译器&#xff0c;则需要安装 Fortran编辑器和MPI库&#xff0c;以下是具体的安装步骤&#xff1a; 一、安装 Fortran 编译器&#xff08;gfortran&#xff09; 在conda环境中安装&#xff1a; conda install -c conda-forge gfortra…

Python脚本:自动化下载视频的日志记录

在数字化时代&#xff0c;视频内容的获取和处理变得日益重要。无论是为了内容备份、离线观看还是数据分析&#xff0c;自动化下载视频成为了一个常见需求。然而&#xff0c;自动化过程中的监控和问题追踪同样重要&#xff0c;这就需要有效的日志记录系统。本文将介绍如何在Pyth…

C/C++基础知识复习(32)

1) 什么是 C 中的函数对象&#xff1f;它有什么特点&#xff1f; 函数对象&#xff08;Function Object&#xff09; 是一个可以像函数一样调用的对象。换句话说&#xff0c;函数对象是重载了 operator() 运算符的类或结构体的实例。由于 C 中一切都是对象&#xff0c;函数对象…

Scala

统计成绩练习 1.计算每个同学的总分和平均分 2.统计每个科目的平均分 3.列出总分前三名和单科前三名&#xff0c;并保存结果到文件中 解题思路如下&#xff1a; 1.读入txt文件&#xff0c;按行读入 2.处理数据 &#xff08;1&#xff09;计算每个同学的总分…

深入解析 Spring MVC:架构、组件与最佳实践

文章目录 1. **DispatcherServlet**2. **HandlerMapping**3. **HandlerAdapter**4. **Controller**5. **ModelAndView**6. **ViewResolver**7. **View** 工作流程配置方式XML 配置Java 配置 最佳实践示例项目项目目录结构控制器 (HelloWorldController.java)服务层 (HelloWorld…

mysql系列2—InnoDB数据存储方式

背景 本文将深入探讨InnoDB的底层存储机制&#xff0c;包括行格式、页结构、页目录以及表空间等核心概念。通过全面了解这些基础概念&#xff0c;有助于把握MySQL的存储架构&#xff0c;也为后续深入讨论MySQL的索引原理和查询优化策略奠定了基础。 1.行格式 mysql中数据以行…

小车AI视觉交互--2.颜色跟随

一、实验目标 前面利用了颜色对象在摄像头画面的x&#xff0c;y不同位置通过云台进行跟踪&#xff0c;接下来我们可以在这个基础上修改下&#xff0c;x方向改为车身左右运动进行跟随&#xff0c;然后根据识别的图像外切圆大小进行前进的控制&#xff0c;通过二者叠加来整体控制…

使用1panel一键安装Ollama WebUI连接本地Ollama使用开源ai模型

当前我的环境 设备有限只有一张3060 12gb显卡&#xff0c;平时用来轻度学习 主机&#xff1a;windows server Ollama&#xff1a;windows版&#xff08;它也有linux和mac&#xff09; 因虚拟机使用的服务器无显卡&#xff0c;只用来跑面板和WebUi 虚拟机&#xff1a;ubuntu se…