ConcurrentStack .
ConcurrentStack - Stack.Synchronized():
Stack mySynchronizedStack = Stack.Synchronized(myStack);
Synchronized(), - , .
Stack myStack = new Stack();
lock (myStack.SyncRoot)
{
foreach (var element in myStack)
{
}
}
, Stack Synchonization().
, :
public static class StackManager
{
private static Stack ParameterStack;
static StackManager()
{
ParameterStack = Stack.Synchronized(new Stack());
}
public static T Pop<T>()
{
object RawObject = ParameterStack.Pop();
return RawObject is T ? (T)RawObject : default(T);
}
public static void Push<T>(T Data)
{
ParameterStack.Push(Data);
}
}
object RawObject, . , Pop .