Skip to content

Latest commit

 

History

History
48 lines (37 loc) · 1.18 KB

File metadata and controls

48 lines (37 loc) · 1.18 KB

TaskValueOption Computation Expression

Namespace: FsToolkit.ErrorHandling

Examples:

Example 1

Given a personId and an age, find a person and update their age.

tryParseInt : string -> int voption
tryFindPersonById : int -> Task<Person voption>
updatePerson : Person -> Task<unit>
// Task<unit voption>
let addResult = taskValueOption {
  let! personId = tryParseInt "3001"
  let! age = tryParseInt "35"
  let! person = tryFindPersonById personId
  let person = { person with Age = age }
  do! updatePerson person
}

Example 2 - IAsyncEnumerable

The taskValueOption CE supports for .. in .. iteration over IAsyncEnumerable<'T> sequences. Iteration stops immediately when the body returns ValueNone, without consuming further elements.

tryProcessItem : Item -> Task<unit voption>
getItemsAsync : unit -> IAsyncEnumerable<Item>
// Task<string voption>
let processItems () =
  taskValueOption {
    for item in getItemsAsync () do
      do! tryProcessItem item
    return "done"
  }
// Returns ValueNone and stops iteration on the first ValueNone result

The backgroundTaskValueOption CE inherits this support automatically.