39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
from threading import RLock
|
|
from typing import Any
|
|
|
|
from reactivex import abc
|
|
|
|
from .singleassignmentdisposable import SingleAssignmentDisposable
|
|
|
|
|
|
class ScheduledDisposable(abc.DisposableBase):
|
|
"""Represents a disposable resource whose disposal invocation will
|
|
be scheduled on the specified Scheduler"""
|
|
|
|
def __init__(
|
|
self, scheduler: abc.SchedulerBase, disposable: abc.DisposableBase
|
|
) -> None:
|
|
"""Initializes a new instance of the ScheduledDisposable class
|
|
that uses a Scheduler on which to dispose the disposable."""
|
|
|
|
self.scheduler = scheduler
|
|
self.disposable = SingleAssignmentDisposable()
|
|
self.disposable.disposable = disposable
|
|
self.lock = RLock()
|
|
|
|
super().__init__()
|
|
|
|
@property
|
|
def is_disposed(self) -> bool:
|
|
return self.disposable.is_disposed
|
|
|
|
def dispose(self) -> None:
|
|
"""Disposes the wrapped disposable on the provided scheduler."""
|
|
|
|
def action(scheduler: abc.SchedulerBase, state: Any) -> None:
|
|
"""Scheduled dispose action"""
|
|
|
|
self.disposable.dispose()
|
|
|
|
self.scheduler.schedule(action)
|