
Dart concurrency limiter for async operations.
δΈζζζ‘£
dependencies:
f_limit: ^1.0.0
dart pub get
import 'package:f_limit/f_limit.dart';
void main() async {
final limit = fLimit(2); // Max 2 concurrent operations
final tasks = List.generate(5, (i) => () async {
await Future.delayed(Duration(seconds: 1));
return i;
});
final results = await Future.wait(tasks.map((task) => limit(task)));
print('Done: $results');
}
| Strategy |
Description |
Use Case |
fifo |
First In, First Out |
Default, fair execution |
lifo |
Last In, First Out |
Stack-like, newest first |
priority |
Priority-based |
Important tasks first |
alternating |
Head β Tail β Head... |
Two-way fair scheduling |
random |
Random selection |
Load balancing |
final limit = fLimit(2, queueStrategy: QueueStrategy.priority);
| Method |
Description |
fLimit(concurrency, {queueStrategy}) |
Create limiter |
| Property |
Type |
Description |
activeCount |
int |
Currently executing |
pendingCount |
int |
In queue |
concurrency |
int |
Max concurrent (get/set) |
queueStrategy |
QueueStrategy |
Current strategy |
| Method |
Description |
call(fn, {priority}) |
Execute with limit |
clearQueue() |
Clear pending tasks |
isolate(fn, {priority}) |
Run in isolate |
map(items, mapper) |
Concurrent mapping |
onIdle |
Wait for completion |
final limit = fLimit(1, queueStrategy: QueueStrategy.priority);
limit(() => print('π΄ Critical'), priority: 10);
limit(() => print('π‘ Normal'), priority: 5);
limit(() => print('π’ Background'), priority: 1);
// Output: π΄ π‘ π’
final limit = fLimit(1);
limit.concurrency = 5; // Increase at runtime
print('Max concurrent: ${limit.concurrency}');
final limit = fLimit(1);
// Add many tasks...
for (int i = 0; i < 100; i++) {
limit(() async => i);
}
print('Pending: ${limit.pendingCount}'); // 99
limit.clearQueue();
print('Pending: ${limit.pendingCount}'); // 0
MIT Β© FlutterCandies