Tail recursion for TaskSeq
I maintainer di solito rispondono entro 2 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Da chiarire
- Stato di attività
- Tranquilla
- Stack tecnologico
- fsharp
- Ambito
- backend-api-design
Direzione di ricerca
Inizia con l’esempio asyncSeq ricorsivo in coda nell’issue e confronta il suo utilizzo previsto con taskSeq e yield!. L’issue non indica file sorgente né test e non definisce né un design accettato né criteri di completamento; questi dovrebbero essere stabiliti prima dell’implementazione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- F#
- Stelle
- 111
- Fork
- 13
- Merge medio
- 19h 47m
- PR unite (30g)
- 1
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di fsprojects/FSharp.Control.TaskSeq
-
agentic-workflows automation repo-assist
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
fsprojects/FSharp.Control.TaskSeq#463 ·
I maintainer di solito rispondono entro 2 giorni
-
agentic-workflows automation repo-assist
Difficoltà 1/5 1-3 ore Idoneità per principianti 35/100
fsprojects/FSharp.Control.TaskSeq#476 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
fsprojects/FSharp.Control.TaskSeq#473 · 2 commenti · 1 reazione ·
I maintainer di solito rispondono entro 2 giorni
-
automation enhancement repo-assist
Difficoltà 5/5 Più di una settimana Idoneità per principianti 10/100
fsprojects/FSharp.Control.TaskSeq#471 ·
I maintainer di solito rispondono entro 2 giorni
-
enhancement needs triage
Difficoltà 5/5 Più di una settimana Idoneità per principianti 45/100
fsprojects/FSharp.Control.TaskSeq#466 ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di fsprojects/FSharp.Control.TaskSeq
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
run-llama/llama_index#23278 ·
I maintainer di solito rispondono entro 2 giorni
-
from-review-extraction priority: low python severity:nit
Difficoltà 2/5 1-3 ore Idoneità per principianti 90/100
LearningCircuit/local-deep-research#6944 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
iMicknl/python-overkiz-api#2263 ·
I maintainer di solito rispondono entro 7 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
meshery/meshery#22119 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
sgl-project/sglang#41482 ·
I maintainer di solito rispondono entro 1 giorno