Почему редактор дротиков все еще работает
Я очень запутался в редакторе дротиков, как он работает. Когда я запускаю это приложение
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 ответ
Решение
Ты слушаешь бегущую в одиночестве. Вы можете закрыть его порт или просто убить его:
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');
}