Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
F#でちょっとずつ返す
Search
tsumiki
November 08, 2025
Programming
21
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
F#でちょっとずつ返す
F#で非同期ストリームを扱う際の内部的な動き
tsumiki
November 08, 2025
More Decks by tsumiki
See All by tsumiki
おもしろい組織図の世界
tsumiki
0
46
リーダブルコードLT
tsumiki
0
27
メディアリニューアルした話
tsumiki
0
21
Svelte触ってみた
tsumiki
0
16
スピーダ事業 Product Teamの1週間を考察してみた。
tsumiki
0
20
New Joinerの時に感じていたことを振り返る
tsumiki
0
20
F# AsyncとTask
tsumiki
0
21
評価が大事
tsumiki
0
24
Other Decks in Programming
See All in Programming
Agents on Rails - Rails at Scale 2026
irinanazarova
0
560
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
R8 の設定見直しでアプリサイズ削減
andpad
0
220
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
320
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
350
AWSに止められる覚悟してますか?
morizo_1984
2
540
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
620
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
250
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
180
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
360
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
630
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
Build your cross-platform service in a week with App Engine
jlugia
234
19k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
エンジニアに許された特別な時間の終わり
watany
109
250k
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
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()
おわり