if I send message from one isolate to the main one, the main can't receive the full message. my test code is blew:
import 'package:flutter/material.dart';
import 'dart:isolate';
import 'dart:async';
void main() {
init();
runApp(MyApp());
}
void test(SendPort port) {
var cnt = 1;
Timer.periodic(new Duration(microseconds: 10), (Timer timer){
port.send(cnt++);
});
}
void init() {
ReceivePort port = new ReceivePort();
print("create an isoalte...");
Isolate.spawn(test, port.sendPort);
port.listen((msg){
print("the return is: $msg");
});
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.display1,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}
if I send the message per seconds, it is ok, so the frequency will impact the main isolate receive message, if the main isoalte is busy, it will drop messages? does the port use the message queue to communication with each other? it is sync or async?