Я новичок в функциональном программировании в целом и недавно начал изучать F #. Я хотел использовать асинхронный рабочий процесс, возвращающий Async<'U option>
, чтобы выбрать элемент в последовательности. Я нашел хорошую Seq.pick
функцию, но я не уверен, как я мог бы использовать это с асинхронным рабочим процессом.
Если это невозможно, есть ли другая альтернатива использованию программы с императивным стилем для выбора элемента из списка. Ниже приведен измененный вариант моей программы. Любая обратная связь высоко ценится.
let run = async {
while not stopped do
use! resource = acquireResourceLockAsync
let! items = fetchItemsAsync 5
let! item = Seq.pick returnIfLocked items
let! status = performTaskAsync item
do! updateStatusAsync status
do! Async.Sleep 1000
}
Спасибо в ожидании.
РЕДАКТИРОВАТЬ : Обновил мой вопрос, основываясь на ответе jpalmer. Я заметил Seq.filter
и Seq.pick
ранее и решил, что Seq.pick
удовлетворит мою потребность лучше, так как мне нужен первый элемент, который я могу заблокировать. Однако я забыл изменить возвращаемое значение моей функции - вместо возврата true
он должен вернуть Some(item)
. Теперь с этим обновлением, есть ли элегантный способ подойти к этому без 1) блокировки потока для преобразования Async<'U option>
в 'U
и 2) обращения к императивному циклу стиля?