semaphore

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));
}

  

原文地址:https://www.cnblogs.com/pythonClub/p/10634780.html