Tail recursion for TaskSeq
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- fsharp
- Lĩnh vực
- backend-api-design
Hướng nghiên cứu
Bắt đầu với ví dụ asyncSeq đệ quy đuôi trong issue và so sánh cách sử dụng dự kiến của nó với taskSeq và yield!. Issue không nêu tên tệp mã nguồn hoặc các bài kiểm thử, cũng không xác định một thiết kế được chấp nhận hay các tiêu chí hoàn thành; những điều đó cần được thiết lập trước khi triển khai.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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.
- Ngôn ngữ chính
- F#
- Star
- 111
- Fork
- 13
- Merge trung bình
- 7 giờ 59 phút
- Pull request đã merge (30 ngày)
- 3
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của fsprojects/FSharp.Control.TaskSeq
-
agentic-workflows automation repo-assist
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
-
agentic-workflows automation repo-assist
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 35/100
fsprojects/FSharp.Control.TaskSeq#476 · 1 bình luận ·
-
bug
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 45/100
fsprojects/FSharp.Control.TaskSeq#473 · 1 bình luận · 1 reaction ·
-
automation enhancement repo-assist
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 10/100
-
enhancement needs triage
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 45/100
Tất cả issue của fsprojects/FSharp.Control.TaskSeq
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
mksglu/context-mode#1200 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
-
clawsweeper:needs-maintainer-review clawsweeper:needs-product-decision clawsweeper:no-new-fix-pr impact:auth-provider issue-rating: 🌊 off-meta tidepool P2
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 80/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100