public UniRx.IObservable <T> RentAsync() { if (disposedValue) { throw new ObjectDisposedException("ObjectPool was already disposed."); } if (q == null) { q = new Queue <T>(); } if (q.Count > 0) { T val = q.Dequeue(); OnBeforeRent(val); return(Observable.Return(val)); } UniRx.IObservable <T> source = CreateInstanceAsync(); return(source.Do(delegate(T x) { OnBeforeRent(x); })); }