Semaphore大家应该都很熟悉,一个能够指定最大并发个数的同步锁。
实际上.NET还有一个轻量级的信号量实现SemaphoreSlim,其不但能够更加高效的实现信号量的功能,还提供了一个异步等待的API。
我们首先回忆下SemaphoreSlim同步等待时的情况。
class Program
{
private static SemaphoreSlim semaphore;
static void Main(string[] args)
{
semaphore = new SemaphoreSlim(1, 1);
var tasks = new Task[2];
for (int i = 0; i <= 1; i++)
{
tasks[i] = Task.Run(() =>
{
Console.WriteLine("Task {0}等待信号量",
Task.CurrentId