| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- using System;
- using System.Threading;
- namespace UniRx
- {
- public sealed class ScheduledDisposable : ICancelable
- {
- private readonly IScheduler scheduler;
- private volatile IDisposable disposable;
- private int isDisposed = 0;
- public ScheduledDisposable(IScheduler scheduler, IDisposable disposable)
- {
- this.scheduler = scheduler;
- this.disposable = disposable;
- }
- public IScheduler Scheduler
- {
- get { return scheduler; }
- }
- public IDisposable Disposable
- {
- get { return disposable; }
- }
- public bool IsDisposed
- {
- get { return isDisposed != 0; }
- }
- public void Dispose()
- {
- Scheduler.Schedule(DisposeInner);
- }
- private void DisposeInner()
- {
- if (Interlocked.Increment(ref isDisposed) == 1)
- {
- disposable.Dispose();
- }
- }
- }
- }
|