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
F#でちょっとずつ返す
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
tsumiki
November 08, 2025
Programming
0
2
F#でちょっとずつ返す
F#で非同期ストリームを扱う際の内部的な動き
tsumiki
November 08, 2025
Tweet
Share
More Decks by tsumiki
See All by tsumiki
リーダブルコードLT
tsumiki
0
4
メディアリニューアルした話
tsumiki
0
3
Svelte触ってみた
tsumiki
0
3
スピーダ事業 Product Teamの1週間を考察してみた。
tsumiki
0
3
New Joinerの時に感じていたことを振り返る
tsumiki
0
3
F# AsyncとTask
tsumiki
0
3
評価が大事
tsumiki
0
4
Other Decks in Programming
See All in Programming
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
950
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
200
Apache Iceberg V3 and migration to V3
tomtanaka
0
130
re:Invent 2025 トレンドからみる製品開発への AI Agent 活用
yoskoh
0
720
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
180
Python札幌 LT資料
t3tra
7
1.1k
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
0
830
AIエージェントの設計で注意するべきポイント6選
har1101
7
3.4k
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
5.9k
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
1.8k
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.2k
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
370
Featured
See All Featured
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
190
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
280
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Embracing the Ebb and Flow
colly
88
5k
For a Future-Friendly Web
brad_frost
182
10k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
400
Amusing Abliteration
ianozsvald
0
92
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
How to Talk to Developers About Accessibility
jct
2
120
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1.1k
Speed Design
sergeychernyshev
33
1.5k
Ethics towards AI in product and experience design
skipperchong
2
190
Transcript
F# でちょっとずつ返す
ちょっとずつ返す?
ちょっとずつ返す? DAG API (F# Minimal API) LLM (Gemini) Request
Request Streaming Response Streaming Response
ちょっとずつ返す? DAG API (F# Minimal API) LLM (Gemini) SCAI
API
選択肢 1. Server-Sent Events ( SSE ) 2. IAsyncEnumerable<T> の活用
a. 非同期ストリームを表現するための .NET の標準的なインターフェース
Server-Sent Events • サーバーからクライアントへ一方向にデータを逐次PushするW3C標準の通信方式 MDN: https://developer.mozilla.org/ja/docs/Web/API/Server-sent_events
IAsyncEnumerable<T> • 非同期ストリームを表現するための .NET の標準的なインターフェース • Chunked transfer encoding (HTTP/1.1で導入されたデータ転送方式)を使用
◦ チャンク形式のHTTPリクエスト ◦ レスポンスヘッダー:Transfer-Encoding: chanked .NET: https://learn.microsoft.com/ja-jp/dotnet/api/system.collections.generic.iasyncenumerable-1?view=net-9.0
DAG API では? • IAsyncEnumerable<T> ◦ TaskSeq を使った実装 • 理由
◦ .NET 標準機能で実装可能 ▪ SSE は .NET 8 だと標準サポートがない ◦ ブラウザ向けではない ▪ だいたいのプログラミング言語、HTTPクライアントライブラリで標準的にサ ポートされている
ポイント Entry Point Driver ① ② DAG API ③
ポイント 1. Driver で逐次データを受け取る 2. Driver から アプリケーション構成レイヤーまで逐次データを返す 3. HTTP
レスポンスとしてクライアントへ逐次データを返す
実装例
ハマった箇所 • do! Task.Yield() や Task.Delay() を入れないと逐次データが返ってこない ◦ まとめて返ってくる
HTTPフレームワーク(ASP.NET Core) TaskSeq(F#) HTTPレスポンスに逐次書き出し(フラッシュ) MoveNextAsync() を呼ぶ 明示的な非同期一時停止 (do! Task.Yield()) 制御をHTTPフレームワークに戻す
要素を受け取る 要素を生成 (yield line) 図解
解説 • フラッシュされるタイミングは、HTTPフレームワークが管理している • 制御を明示的に戻す必要がある ◦ Task.Yield(), Task.Delay()
おわり