Почему редактор dart все еще работает

#dart #dart-editor

#dart #dart-editor

Вопрос:

Я очень смущен редактором dart, как он работает. Когда я запускаю это приложение

 import 'dart:isolate';
import 'package:dbcrypt/dbcrypt.dart';
import 'dart:async';

main() {

  //ReceivePort receivePort = new ReceivePort();
  var receivePortPw = new ReceivePort();
  receivePortPw.listen((msg) {
     print(msg); 
  });


  Future<Isolate> f = Isolate.spawn(ReturnHashedPassword, receivePortPw.sendPort);
  f.then((Isolate i) {
    print('Print1 -> '   new DBCrypt().hashpw('Password', new DBCrypt().gensalt()));
    print('Print2 -> '   new DBCrypt().hashpw('Password', new DBCrypt().gensalt()));
  });
}

void ReturnHashedPassword(SendPort sendPort)
{
    print('ok');
    ReceivePort receivePort = new ReceivePort();
    sendPort.send('Isolate -> '   new DBCrypt().hashpw('Password', new DBCrypt().gensalt()));
    print('done');
}
  

редактор следит, он все еще работает. Посмотрите на следующий экран печати, кнопка завершения (красная квадратная кнопка) не отключена, она помнит меня, когда я запускаю http-сервер, эта кнопка не будет отключена, пока я не сделаю это вручную.
введите описание изображения здесь

Почему кнопка завершения не отключается здесь после вывода? Это всего лишь приложение ввода-вывода, это не веб-сервер.

Ответ №1:

Вы слушаете запуск isolate. Вы можете закрыть его порт или просто отключить его:

 import 'dart:isolate';
import 'package:dbcrypt/dbcrypt.dart';
import 'dart:async';

main() {

  //ReceivePort receivePort = new ReceivePort();
  var receivePortPw = new ReceivePort();
  receivePortPw.listen((msg) {
     print(msg);
     receivePortPw.close();//stop listening.
  });


  Future<Isolate> f = Isolate.spawn(ReturnHashedPassword, receivePortPw.sendPort);
  f.then((Isolate i) {
    print('Print1 -> '   new DBCrypt().hashpw('Password', new DBCrypt().gensalt()));
    print('Print2 -> '   new DBCrypt().hashpw('Password', new DBCrypt().gensalt()));
    //i.kill(); // not nice...
  });
}

void ReturnHashedPassword(SendPort sendPort)
{
    print('ok');
    ReceivePort receivePort = new ReceivePort();
    sendPort.send('Isolate -> '   new DBCrypt().hashpw('Password', new DBCrypt().gensalt()));
    print('done');
}