Tail recursion for TaskSeq
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 25/100
- issue の種類
- 機能追加
- 明瞭さ
- 説明が足りない
- 活発さ
- 静か
- 技術スタック
- fsharp
調査の方向性
issue にある末尾再帰的な asyncSeq の例から始め、その意図された使用方法を taskSeq および yield! と比較してください。issue ではソースファイルやテストが指定されておらず、受け入れられる設計や完了基準も定義されていません。それらは実装前に確立する必要があります。
索引モデルが issue の本文から書いたものです。
説明
We've removed the tail recursion because it was hard to consolidate it into yield! (it was instead done with return!, which has no place in taskSeq).
However, today I helped someone with some code that he considered for taskSeq which had the following approach:
let getPoliciesAsync policyid =
asyncSeq{
use connection = new NpgsqlConnection(npgsqlConnectionStringBuilder.ConnectionString)
use command = new NpgsqlCommand($"SELECT policy_data FROM policy.tbl_policy where policy_id = {Sql.uuid policyid};", connection)
let! reader = command.ExecuteReaderAsync() |> Async.AwaitTask
let rec someRec() = asyncSeq{
let! rowExists = reader.ReadAsync() |> Async.AwaitTask
if rowExists then
yield {| dt1 = reader.GetString(0) |}
yield! someRec()
}
yield! someRec()
} |> AsyncSeq.toAsyncEnum
As you can see, it uses asyncSeq, but also: it is recursive. The same approach with taskSeq would likely be more performant, however, if there are a lot of rows, this becomes problematic. This code can be rewritten with a loop, though.
@dsyme, sharing this with you in case we want to revisit this at some point.
- 主要言語
- F#
- スター
- 111
- フォーク
- 13
- 平均マージ
- 7時間 59分
- マージ済み PR(30日)
- 3
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
fsprojects/FSharp.Control.TaskSeq のほかの issue
-
agentic-workflows automation repo-assist
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
-
agentic-workflows automation repo-assist
難易度 1/5 1〜3時間 初心者へのやさしさ 35/100
fsprojects/FSharp.Control.TaskSeq#476 · コメント 1 件 ·
-
bug
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
fsprojects/FSharp.Control.TaskSeq#473 · コメント 1 件 ·
-
automation enhancement repo-assist
難易度 5/5 1週間以上 初心者へのやさしさ 10/100
-
enhancement needs triage
難易度 5/5 1週間以上 初心者へのやさしさ 45/100
fsprojects/FSharp.Control.TaskSeq の issue をすべて見る
似ている issue
-
Bug
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
Automattic/safe-publish#593 ·
-
area/plugin
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
kestra-io/plugin-kestra#190 ·
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
xinnan-tech/xiaozhi-fde-talk#263 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
-
pending-maintainer-response pending-triage
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100