ConcurrentStack
併發堆棧(ConcurrentStack<T>
)是線程安全的後進先出(LIFO
)的集合。
特點
- 線程安全
- 後進先出(Last in, First out)
定義它
private static readonly ConcurrentStack<string> _stack = new ConcurrentStack<string>();
基本使用
// 在頂部插入一個對象
_stack.Push("first");
_stack.Push("second");
// 如果頂部有對象就返回,但不刪除對象
_stack.TryPeek(out var result0);
Console.WriteLine(result0);
// 如果頂部有對象就返回,同時刪除對象
_stack.TryPop(out var result1);
Console.WriteLine(result1);
// 如果頂部有對象就返回,同時刪除對象
_stack.TryPop(out var result2);
Console.WriteLine(result2);
// 如果頂部沒有對象,就返回空
_stack.TryPop(out var result3);
Console.WriteLine(result3);
ConcurrentQueue
併發隊列(ConcurrentQueue<T>
)是線程安全的先進先出(FIFO
)的集合。
特點
- 線程安全
- 先進先出(First Input, First Output)
定義它
private static readonly ConcurrentQueue<string> _queue = new ConcurrentQueue<string>();
基本使用
// 在末尾添加一個對象
_queue.Enqueue("first");
_queue.Enqueue("second");
// 嘗試拿出開頭的對象,但不移除對象
_queue.TryPeek(out var result3);
Console.WriteLine(result3);
// 嘗試拿出開頭的對象,同時刪除對象
_queue.TryDequeue(out var result4);
Console.WriteLine(result4);
// 嘗試拿出開頭的對象,同時刪除對象
_queue.TryDequeue(out var result5);
Console.WriteLine(result5);
// 嘗試拿出開頭的對象,沒有可拿的就返回空
_queue.TryDequeue(out var result6);
Console.WriteLine(result6);