public Thread Peek(ThreadStart threadStart)
{
while (!isDisposing && avalaibleThreadCount == 0)
autoResetEvent.WaitOne();
lock (syncRoot)
{
if (isDisposing)
return null;
if (Interlocked.Decrement(ref avalaibleThreadCount) < 0)
return Peek(threadStart);
}
return new Thread(threadStart);
}