
要创建异步单并行程度的工作队列,您可以简单地创建一个
SemaphoreSlim,将其初始化为1,然后
await在开始请求的工作之前使用获取该信号量的入队方法。
public class TaskQueue{ private SemaphoreSlim semaphore; public TaskQueue() { semaphore = new SemaphoreSlim(1); } public async Task<T> Enqueue<T>(Func<Task<T>> taskGenerator) { await semaphore.WaitAsync(); try { return await taskGenerator(); } finally { semaphore.Release(); } } public async Task Enqueue(Func<Task> taskGenerator) { await semaphore.WaitAsync(); try { await taskGenerator(); } finally { semaphore.Release(); } }}当然,除了具有固定的并行度之外,只需将信号量初始化为其他数字即可。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)