2017-08-16 1 views
1

Attendu "Bonjour tout le monde" à partir du code isolate simple illustré ci-dessous & ne fonctionnait pas.Le code d'isolement n'a pas fonctionné comme prévu

import 'dart:async'; 
import 'dart:isolate'; 

var mainReceivePort = new ReceivePort(); 

main() async { 
    await Isolate.spawn(hello, null); 
    await for (var msg in mainReceivePort) { 
    print(msg); 
    return; 
    } 
} 

hello(_) async { 
    var sendPort = mainReceivePort.sendPort; 
    sendPort.send("Hello world"); 
} 

Lorsque suivants modifications ont été apportées au code, il fonctionne comme prévu

import 'dart:async'; 
import 'dart:isolate'; 

var mainReceivePort = new ReceivePort(); 

main() async { 
    await Isolate.spawn(hello, mainReceivePort.sendPort); 
    await for (var msg in mainReceivePort) { 
    print(msg); 
    return; 
    } 
} 

hello(sendPort) async { 
    sendPort.send("Hello world"); 
} 

Vous cherchez des indices. Des pensées?

+0

Qu'est-ce que "ne fonctionne pas" signifie exactement? Quel est le comportement attendu? Quel est le comportement réel? –

+0

Pourquoi attendez-vous le premier exemple, où vous passez 'null' au lieu de' mainReceivePort.sendPort', pour fonctionner? –

Répondre

1

Dans le premier exemple, sendPort n'est pas connecté à l'isolat principal, il n'existe que dans l'isolat généré.

Ce code est exécuté dans les deux isole

var mainReceivePort = new ReceivePort(); 

et chaque isolat obtient un autre exemple mainReceivePort qui ne sont pas connectés en aucune façon.

Dans le 2ème exemple le sendPort connecté à mainReceivePort du principal isolat est passé à l'isolat donné naissance et les messages transmis à il sera reçu par le mainReceivePort connecté de l'isolat principal.