47 lines
1017 B
C#
47 lines
1017 B
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|