Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Dart's Async Stream<T> gotchas
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
UEHARA Junji
March 29, 2018
Technology
1
160
Dart's Async Stream<T> gotchas
About Dart's async Stream and syntax sugers, async*, await for...
UEHARA Junji
March 29, 2018
Tweet
Share
More Decks by UEHARA Junji
See All by UEHARA Junji
Dart Isolate, Port and Capabilities
uehaj
5
1.1k
Other Decks in Technology
See All in Technology
AI駆動PjMの理想像 と現在地 -実践例を添えて-
masahiro_okamura
1
110
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
930
外部キー制約の知っておいて欲しいこと - RDBMSを正しく使うために必要なこと / FOREIGN KEY Night
soudai
PRO
12
5.5k
セキュリティについて学ぶ会 / 2026 01 25 Takamatsu WordPress Meetup
rocketmartue
1
300
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1k
量子クラウドサービスの裏側 〜Deep Dive into OQTOPUS〜
oqtopus
0
120
Tebiki Engineering Team Deck
tebiki
0
24k
AzureでのIaC - Bicep? Terraform? それ早く言ってよ会議
torumakabe
1
540
Context Engineeringの取り組み
nutslove
0
340
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
450
AWS Network Firewall Proxyを触ってみた
nagisa53
1
230
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
570
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
140
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
450
[SF Ruby Conf 2025] Rails X
palkan
1
750
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
52k
GitHub's CSS Performance
jonrohan
1032
470k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.8k
KATA
mclloyd
PRO
34
15k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
940
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
Transcript
Dartの非同期ストリーム 周りをちょっと見てみる NTTςΫϊΫϩεגࣜձࣾ ্ݪ५ೋ Dart Meetup Tokyo #4 2018/3/29
ࣗݾհ ্ݪ५ೋ(@uehaj) ॴଐ: NTTςΫϊΫϩεגࣜձࣾ ͖ͳݴޠ() Groovy,Elm,Rust,Haskell,JavaScript(React/Redux/ Redux-Saga,Cordova, ReactNative), Dart [new!]
ॻ੶ ϓϩάϥϛϯάGroovy(ٕධ) Grailsపఈೖ(ᠳӭࣾ)
͡Ίʹ Dartݴޠɺྑ͍Ͱ͢Ͷ! 2013ʹࢼͯ͠Ҏདྷ5ͿΓ2 ྑ͍ͱࢥͬͨ͜ͱ ฏ໌ɺৗࣝతɺྑ͍ͱ͜ͲΓ ଞݴޠͷܦݧ͔Βྨਪ͕ޮ͖ͦ͏ ͰݟͳΕ͵ͷ͋Δ async*, await for
͢͜ͱ Dartͷؔఆٛͷम০ࢠ(async, async*, sync*) ͬͯԿ? ಛʹasync* Ͳ͏͍Θ͚Δͷ? await for Stream<T>
ؔम০ࢠ ྫ ໊শ ΧδϡΞϧͳઆ໌ म০ͳ͠ T func() {} ؔ
ී௨ͷؔ async Future<T> func() async {} ඇಉظؔ BTZODGVODUJPOT +4$ͷBTZODؔ sync* Iteratable<T> func() sync* {} ಉظδΣωϨʔλ (synchronous generators) JS/PythonͷδΣωϨʔλ async* Stream<T> func() async*{} ඇಉظδΣωϨʔλ (asynchronous generators) ???
Stream<T> is Կ? ୯Ұ ෳ ಉظ T Iterable<T> ඇಉظ Future<T>
Stream<T> • ͜͜Ͱͷ”ඇಉظ”ʮݱεϨουͰ͕औΕͳ͍ʯఔͷҙ • StreamʹෳϦεφΛొͰ͖ΔϒϩʔυΩϟετετϦʔϜ ͱɺҰ͔ͭ͠ొͰ͖ͳ͍୯ҰొετϦʔϜ͕͋Δ͕(ܕಉ ͡)ɺasync*୯ҰొετϦʔϜΛฦ͢ɻ
StreamͱIterableͷҧ͍
म০ͷޮՌ ྫ ؔͰ͑Δ return await await for yield yield* म০ͳ͠
T func() {} ✔ × × × × async Future<T> func() async {} ✔ ✔ ✔ × × sync* Iteratable<T> func() sync* {} × × × ✔ ✔ async* Stream<T> func() async*{} × ✔ ✔ ✔ ✔
async*ؔम০ࢠͱ தͰawait(for)͕͑Δ ඇಉظॲཧΛಉظॲཧͷΑ͏ʹॻ͚Δ தͰyield͕͑Δ Stream<T>Λฦ͢δΣωϨʔλ(త)ؔ StreamContorllerΛͬͨStreamੜίʔυͷγϯ λοΫεγϡΨʔ
async*Λ͏ͱ͖ yieldͰStream<T>Λ৽نʹɺ͘͠ผͷStreamΛՃ ͯ͠࡞Δ ผͷStream<T>Λyield*Ͱ݁߹͢Δ ετϦʔϜॲཧΛݟ͘͢ॻ͖͍ͨ c.f. RxDart, flutter.async.*
await forͬͯԿ? ετϦʔϜʹର͢ΔҎԼͷॲཧΛforϧʔϓΆ͘ॻ͘γϯλοΫεγϡ Ψʔ A. ཁૉճ࣮ߦ͞ΕΔΠϕϯτϋϯυϥઃఆ B. (Ωϟϯηϧ࣌Τϥʔϋϯυϥઃఆ) C. Ұ࿈ͷΠϕϯτϋϯυϥ࣮ߦ͕ྃͨ͠ͱ͖ͷඇಉظίʔϧόο
Ϋઃఆ D. Cʹ͍ͭͯawait ඍົɾෆศ ແݶετϦʔϜʹద༻͢ΔͱɺCDʹ౸ୡ͠ͳ͍ CͰͷFutureͰൃੜ͢Δඇಉظྫ֎ΛߏจతʹΩϟονͰ͖ͳ͍
await forγϯλοΫεγϡΨʔ try { await for (elem in stream) {
AAA } } catch (e) { BBB } CCC stream.listen((elem) { AAA }, onError: (e) { BBB }, onDone: () { CCC } );
await forॊೈੑ͕͍ listen()ͳΒ ແݶετϦʔϜΛѻ͑Δ listen()͕ฦ͢StreamSubscriptionΛasFeature()Ͱ FutureԽͯ͠onErrorΛϋϯυϧͰ͖Δɻ
Stream<T>Dartඪ४ϥΠϒϥϦͷͲ ͜ͰΘΕ͍ͯΔ͔ DOMΠϕϯτɺWebSocketΫϥΠΞϯτ (dart:html) ϑΝΠϧIOɺHTTP/WebSocketαʔό(dart:io) ΞΠιϨʔτؒ௨৴ʹ͏ReceivePort
Stream<T>Flutter SDKͷͲ͜ͰΘ Ε͍ͯΔ͔ StreamBuilder: Stream͔ΒWidgetΛੜ EventChannel.StreamHandler: ωΠςΟϒϞ δϡʔϧ͔ΒDartͷσʔλड৴ flutter.async.*Stream* GUIΠϕϯτॲཧStreamͰͳ͍
[※] https://medium.com/@svenasse/flutter-event-channels-89623ce6c017
·ͱΊ async*ɺStreamΛδΣωϨʔλͷΑ͏ʹॻͨ͘Ί ͷγϯλοΫεγϡΨʔͰͨ͠ Stream<T>Λཧղ͢Δඞཁ͕͋Δ ←ॏཁ
ࢀߟࢿྉ Dart Language Asynchrony Support: Phase 2 https://www.dartlang.org/articles/language/beyond- async ϓϩάϥϛϯάݴޠDartͷجૅ
https://www.cresc.co.jp/tech/java/Google_Dart/ DartLanguageGuide.pdf