using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
// SemaphoreSlim 用于控制对资源的并发访问
private static readonly SemaphoreSlim semaphore = new SemaphoreSlim(3); // 允许最多3个线程同时访问
static async Task Main(string[] args)
{
var tasks = new Task[10];
for (int i = 0; i < tasks.Length; i++)
{
int taskNum = i;
tasks[i] = Task.Run(async () =>
{
Console.WriteLine($"Task {taskNum} is waiting to enter the semaphore.");
// 请求进入信号量
await semaphore.WaitAsync();
try
{
Console.WriteLine($"Task {taskNum} has entered the semaphore.");
await Task.Delay(2000); // 模拟耗时操作
}
finally
{
// 释放信号量
semaphore.Release();
Console.WriteLine($"Task {taskNum} has released the semaphore.");
}
});
}
await Task.WhenAll(tasks);
}
}
SemaphoreSlim
是一个轻量级的同步原语,用于限制可以同时访问资源或资源池的线程数。SemaphoreSlim
实例。WaitAsync()
方法请求进入信号量,这会阻塞当前线程直到有可用的信号量槽位。Release()
方法释放信号量,以便其他等待的线程可以进入。下一篇:c#timer
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站