Tail recursion for TaskSeq
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Necesita aclaración
- Estado de actividad
- Tranquilo
- Stack tecnológico
- fsharp
- Área
- backend-api-design
Línea de trabajo
Empieza por el ejemplo asyncSeq recursivo de cola del issue y compara su uso previsto con taskSeq y yield!. El issue no nombra archivos fuente ni pruebas, y no define un diseño aceptado ni criterios de finalización; habría que establecerlos antes de la implementación.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- F#
- Estrellas
- 111
- Forks
- 13
- Merge medio
- 7 h 59 min
- PR fusionados (30 d)
- 3
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de fsprojects/FSharp.Control.TaskSeq
-
agentic-workflows automation repo-assist
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
agentic-workflows automation repo-assist
Dificultad 1/5 1-3 horas Aptitud para principiantes 35/100
fsprojects/FSharp.Control.TaskSeq#476 · 1 comentario ·
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
fsprojects/FSharp.Control.TaskSeq#473 · 1 comentario ·
-
automation enhancement repo-assist
Dificultad 5/5 Más de una semana Aptitud para principiantes 10/100
-
enhancement needs triage
Dificultad 5/5 Más de una semana Aptitud para principiantes 45/100
Todos los issues de fsprojects/FSharp.Control.TaskSeq
Issues similares
-
Bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Automattic/safe-publish#593 ·
-
executions.Query — startDate and timeRange filters are sent with inverted comparison operators Abiertoarea/plugin
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
kestra-io/plugin-kestra#190 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
xinnan-tech/xiaozhi-fde-talk#263 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
pending-maintainer-response pending-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100