cuốn sách gpt4 ai đã làm

Gọi RxJava2 từ đúng luồng có thể hủy/dùng một lần

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 13:43:27 27 4
mua khóa gpt4 Nike

Tôi đang triển khai một Tài nguyên Một Observable phát ra các hàng.

Vấn đề là tài nguyên này thực sự không muốn bị đóng khỏi luồng khác đã tạo ra nó (nó sẽ giết một con chó con và ném ra một ngoại lệ khi điều đó xảy ra).

Khi tôi xử lý đăng ký, tài nguyên Có thể hủy/dùng một lầntừ chủ yếu chủ đề đang gọi trong khi có thể quan sát được đã có sẵn Trình lập lịch biểu.io() Đăng ký trên.

Đây là mã Kotlin:

dòng vui nhộn(): Có thể quan sát được =
Có thể quan sát.create { bộ phát ->
tài nguyên val = NetworkResource()
emitter.setCancellable {
Resource.close() // <-- luồng chính :(
}
thử {
trong khi (! emitter.isDispose)
emitter.onNext(resource.readLine()) // <-- bị chặn ở đây!
} bắt (ioe: IOException) {
emitter.tryOnError(ioe) // <-- điều này cũng gây ra sự hủy bỏ
}
}

val dùng một lần = dòng()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { Log.i(TAG, "Line: $it" }

dùng một lần.dispose() // <- chủ đề chính :)

câu hỏi: Liệu nó có thể được gọi làCó thể hủytừ chuỗi * chính xác, vì chuỗi đăng ký nằm trong tài nguyên.readLine() Nó có bị chặn không?

*Chủ đề đúng có nghĩa là từđăng kýOn(Schedures.io())chủ đề.

biên tập: Tôi e rằng không có câu trả lời đúng cho câu hỏi này trừ khitài nguyên.đóng ()hiện hữu tài nguyên.dataReady Nếu an toàn luồng hoặc một số loại bỏ phiếu được triển khai, luồng sẽ không bị chặn.

câu trả lời hay nhất

Trình lập lịch biểu.io() Quản lý nhóm luồng để có thể sử dụng hoặc không sử dụng cùng một luồng để xử lý tài nguyên của bạn. Bạn sẽ phải sử dụng một bộ lập lịch tùy chỉnh và hủy đăng kýOn() nhà điều hành để đảm bảo của bạn Có thể quan sát được Đăng ký và hủy đăng ký trên cùng một chủ đề. Một cái gì đó như thế này:

Trình lập lịch biểu customScheduler = Schedulers.from(Executors.newSingleThreadExecutor());

val dùng một lần = dòng()
.unsubscribeOn(customScheduler)
.subscribeOn(customScheduler)
.observeOn(AndroidSchedulers.mainThread())
.subscribe { Log.i(TAG, "Line: $it" }

Về android - gọi RxJava2 từ đúng luồng để có thể hủy/dùng một lần, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/46820107/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress