Odkryłem eksperymentując, że utworzenie timera o czasie trwania 0 pozwala mi odroczyć pracę do kolejki zdarzeń. Bardzo podoba mi się ta funkcja, ponieważ pozwala uniknąć wielu nieprzyjemnych problemów z powtarzalnością. Czy ta zamierzona funkcjonalność nie ulegnie zmianie? Czy można go dodać do dokumentacji? Jeśli nie, czy jest obsługiwany sposób, aby to zrobić?Dart: Używa timera czasu zerowego obsługiwanego sposobu odraczania pracy do pętli zdarzeń.
Odpowiedz
Aktualny Odpowiedź
Właściwym sposobem na to jest z scheduleMicrotask(Function callback)
.
Zobacz dokumentację API tutaj: https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart-async#id_scheduleMicrotask
ciekawy artykuł na asynchronicznych zadań i pętli zdarzeń jest tutaj: https://www.dartlang.org/articles/event-loop/
Old Answer (pre Dart 1.0)
Na razie odpowiedź brzmi tak, new Timer(0, callback)
jest najprostszym sposobem odroczenia wywołania funkcji.
Wkrótce, miejmy nadzieję, zostanie naprawione http://dartbug.com/5691 i będzie lepszy sposób. Problem z Timerem polega na tym, że specyfikacja HTML mówi, że wywołanie zwrotne powinno nastąpić nie wcześniej niż 4 ms później. W zależności od tego, co robisz, może to być problematyczne. W celu rozwiązania tego problemu firma Microsoft wprowadziła . Wywołuje wywołanie zwrotne na początku następnej pętli zdarzeń, po każdym odrysowaniu. Moim preferowanym rozwiązaniem w Dart jest odliczanie do następnej pętli zdarzeń i prawdopodobnie funkcja taka jak defer()
, która oddzwoni.
Ale nadal będzie działać new Timer(0, f)
, nawet po lepszym rozwiązaniu. Nie miałbym jednak nic przeciwko ostrzeżeniu o lintach.
- 1. Czy ktoś dostał Dev_compiler Dart do pracy?
- 2. Prześlij zadanie do pętli zdarzeń asyncio
- 3. Czy Android używa NTP do synchronizacji czasu?
- 4. DateTime.TryParse nie akceptuje zerowego czasu null?
- 5. Uzyskaj liczbę (aktywnych) liczników czasu w pętli zdarzeń Node.js
- 6. Optymalizacja czasu pracy algorytmu
- 7. Jak mogę łańcucha wiele zdarzeń obciążenia ImageElement w Dart
- 8. Jak zatrzymać odsłuchiwanie zdarzeń HTML w Dart?
- 9. Limit czasu pracy jednorożców
- 10. Jednostka testująca klasę, która używa licznika czasu
- 11. Dodawanie czasu do pracy mysqldump cron?
- 12. Kiedy używać wielu pętli zdarzeń?
- 13. Utwórz obserwowalne dla pętli zdarzeń
- 14. Podstawowe pętli zdarzeń w Pythonie
- 15. Eclipse Nieobsługiwany wyjątek pętli zdarzeń
- 16. Jak zdobyć znacznik czasu w Dart?
- 17. Dekompresja czasu pracy silnika gry
- 18. Limit czasu pracy agenta serwera SQL
- 19. bookshelf.js nie znaczniki czasu pracy
- 20. Android: symulacja długiego czasu pracy
- 21. wezwanie obok na pętli ruby od sposobu zewnętrznego
- 22. Groovy dla czasu wykonania pętli
- 23. Asynchroniczne projektowanie pętli zdarzeń i problemy
- 24. Określanie systemu DRM obsługiwanego przez przeglądarkę
- 25. Konieczność zamknięcia asyncio pętli zdarzeń explicite
- 26. Dart Wycofane Pole, jak dodać teraz obsługę zdarzeń?
- 27. Czy używasz legalnego sposobu na złamanie dwóch pętli?
- 28. Osadzanie Dart do stosowania
- 29. Nie można utworzyć pętli zdarzeń potomnych
- 30. Sposób C++ 11 budowy pętli zdarzeń
Fuj, opóźnienie 4ms jest niefortunne. "odroczenie" (i posiadanie go przez Future.immediate) brzmi świetnie. Na razie mogę zakodować funkcję odroczenia, która fałszuje ją za pomocą timera. Myślę, że to naprawdę ważne. Ponowne wywołanie połączenia przychodzącego zawsze prowadziło do kłopotliwych błędów w kodzie sterowanym zdarzeniami. Inną rzeczą, która byłaby fajna, jest możliwość stworzenia pilnego wydarzenia, które "przeskoczy kolejkę". Czasami chcesz to zrobić, aby móc zmienić stan bezpośrednio przed przetwarzaniem zdarzeń oczekujących w kolejce. –
Zaktualizowałem swoją odpowiedź, aby odzwierciedlić obecny stan asynchronicznych interfejsów API, który jest znacznie lepszy. Sądzę, że opóźnienie 4ms powinno zniknąć we wszystkich obsługiwanych przeglądarkach teraz (IE 10+). –