12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- 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();
- }
- }
- }
- }
|