void func(String dummy) {
String? name = stdin.readLineSync();
print(name);
}
void main(List<String> args) {
Isolate.spawn(func, "Testing");
}
為什么我的程式不提示用戶輸入..并等待我輸入它。相反,它只是退出。有人可以幫我解釋一下。不知道在哪里看。
我確實找到了一個類似的問題,他們在那里使用了一個 while 回圈并在其中使用了readLineSync……而且由于 dart 的單執行緒……它在那里不起作用。
uj5u.com熱心網友回復:
當主隔離不再需要執行時,Dart 程式將終止,事件佇列上沒有事件,并且不訂閱任何會導致新事件添加到事件佇列的事件源(如ReceivePort或Timer)。生成的隔離是否仍在執行并不重要,因為它們只會被殺死。
你需要讓主隔離做一些事情,或者讓主隔離使用ReceivePort/訂閱來自你產生的隔離的信號,SendPort因為這將防止主隔離被終止(因為它訂閱了一個事件源,這可能會在事件佇列中添加新事件)。
使用的一個例子addOnExitListener的上Isolate物件在這里可以看到:
import 'dart:async';
import 'dart:io';
import 'dart:isolate';
void func(String dummy) {
print('Enter your name:');
final name = stdin.readLineSync();
print('Your name is: $name');
}
Future<void> main(List<String> args) async {
final onExitReceivePort = ReceivePort();
final isolate = await Isolate.spawn(func, "Testing");
isolate.addOnExitListener(
onExitReceivePort.sendPort,
response: 'ReadLineIsolateStopped',
);
// Listen on spawned isolate is stopped event
await for (final onExitEvent in onExitReceivePort) {
print('Got event: $onExitEvent');
onExitReceivePort.close();
}
}
onExitReceivePort一旦我們得到一個事件(因為生成的隔離已經消失),我們就在這里關閉這將停止我們的主隔離和程式的其余部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/371755.html
上一篇:如何從顏色串列中為容器分配顏色?
