编程知识 cdmana.com

Discuter des propriétés de la file d'attente pour l'événement bloc

Préface

InFlutterOui.stateLe concept de,Nous utilisonsBlocGestion de l'état,AdoptionBloc.addEventLa façon dont les événements sont transmis,Changement de statut.À propos deBlocUtilisation de base de,DisponibleBlocInformations pertinentes sur le site officiel,Ici, on enregistre justeBlocFile d'attente pour.

Tout d'abord,,On en construit un nouveau.BlocCatégorie:

class TestBloc extends Bloc<TestEvent, TestState> {
  TestBloc() : super(new TestState());

  @override
  Stream<TestState> mapEventToState(TestEvent event) async* {
    if (event is TestEventA) {
      print("A");
      await Future.delayed(Duration(seconds: 2));
      print("finish A await");
    } else if (event is TestEventB) {
      print("B");
    }
  }
}

abstract class TestEvent {}

class TestEventA extends TestEvent {}

class TestEventB extends TestEvent {}

class TestState {}
Copier le Code

Comme ci - dessus, Définit une base Bloc,ÉvénementsA,ÉvénementsB. Nous avons reçu l'incident A Le délai d'attente 2Secondes,Pour la validationBlocDeEvent Loop Si elle est obstructive .

Nouvelle page main.dart, Ajouter un événement bouton ,En même tempsblocEnvoyer l'événementAEt événementsB:

//...Omettre les codes non critiques
onPressed: (){
          _bloc.add(TestEventA());
          _bloc.add(TestEventB());
    }
Copier le Code
Phénomènes:

print("A") Après impression,J'attends.2Secondes,Imprimer "finish A await", Avant de répondre à l'événement BDéclencheur de.

Conclusions:

Bloc De event La file d'attente est une file d'attente bloquante ,Premier entré, premier sorti, Seulement quand l'événement précédent a été consommé , Pour déclencher l'événement suivant dans la file d'attente de réponse .


Expliquer les problèmes rencontrés dans le développement :

In await Devant.addEvent,Ça bloque les fils, Retard dans la réception de l'événement ,Mais dansawaitDevant. yeild Non affecté, Le changement d'état peut être reçu avant le délai

Stream Les files d'attente sont - elles aussi ordonnées ?

Réussir le test de code , L'ordre des corps de message dans le flux est indépendant de l'ordre dans lequel ils sont ajoutés , Corrélation positive avec le temps consacré au corps du message lui - même .

版权声明
本文为[Li xiaobangNuggets]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/09/20210914164426013s.html

Scroll to Top