Logo

Semalot

👨 “Semalot!” 👨‍🦱 “Semalot!!” 👴 “Semalot!!!” 🤦‍♀️ “这只是一个计数器而已……” 👨👨‍🦱👴 “嘘!!!!”

一个用于 Swift 异步任务的初级计数信号量,我在我的代码中经常使用它,所以我认为我应该把它变成一个软件包!

目前用于

详细文档 可以在这里找到

概述

正如其名。它简单高效,不使用任何调度锁,也不会引起任何任务队列拥塞。

let maxConcurrentOperations = Semalot(tickets: 3)

try await withThrowingTaskGroup { group in
    for request in lotsOfRequests {
        await maxConcurrentOperations.takeTicket()
        group.addTask {
            let data = try await urlSession.data(for: request).0
            await doThings(with: data)
            maxConcurrentOperations.returnTicket()
        }
    }
}

许可

版权所有 (c) 2023 Paul Tsochantaris。 根据 MIT 许可证授权,详情请参阅 LICENSE 文件。