UniRx 에셋 추가
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user