import 'dart:async'; import 'package:semaphore/semaphore.dart'; Future<void> main() async { var maxCount = 3; var sm = new LocalSemaphore(maxCount); var tasks = <Future>[]; for (var i = 0; i < 9; i++) { tasks.add( new Future( () async { try { await sm.acquire(); print("Start $i, running $running"); await _doWork(1000); print("End $i, running $running"); } finally { sm.release(); } } ) ); } await Future.wait(tasks); print("Max permits: $maxCount, max simultaneous runned: $simultaneous"); } Future _doWork(int ms) { // Simulate work return new Future.delayed(new Duration(milliseconds: ms)); }
import 'dart:async'; import 'package:semaphore/semaphore.dart'; void main()async{ var maxCount = 3; var sm = LocalSemaphore(maxCount); var tasks = <Future>[]; for (int i=0; i<9; i++){ tasks.add(manage(sm)); } await Future.wait(tasks); } Future manage(LocalSemaphore sm)async{ try { await sm.acquire(); await doWork(1); } finally{ sm.release(); } } Future doWork(int ms){ print('a'); return Future.delayed(Duration(seconds: ms)); }