Почему я возвращаю Async <unit>вместо Async <Result>? - PullRequest
0 голосов
/ 06 февраля 2019

Проблема:

Я пытаюсь понять, как смоделировать функцию, которая возвращает тип результата Async.

Пример:

type Get<'requestor,'item,'error> = 'requestor -> Async<Result<'item list,'error>>

ПРИМЕЧАНИЕ:

Я не сталкивался с этой проблемой, пока мне не пришлось писать код на C #, основанный на типе функции F #.Следовательно, мой код C # выполняет ввод-вывод и в результате хочет использовать тип задачи.

Неудачная попытка:

Я хочу написать идиоматический код F # и нехочу разбрызгивать типы задач C # по всем моим подписям F #.

Например, я не хочу этого делать:

type Get<'requestor,'item,'error> = 'requestor -> Task<Result<'item list,'error>>

Моя проблема в том, что я не понялспособ возврата:

Async<Result<'item list,'error>>

Вот пример моей неудачи:

let someLongRunningOperation = async { Ok [1] } // Returns Async<unit> instead of AsyncResult

Вывод:

В заключение, как мне вернутьсятип Async Result, ссылающийся на следующий неудачный пример:

let someLongRunningOperation = async { Ok [1] }

1 Ответ

0 голосов
/ 06 февраля 2019

Внутри вычислительного выражения вам нужно использовать ключевое слово return для переноса значений в типы этого CE.Вот так:

let someLongRunningOperation = async { Ok [1] }

следует исправить следующим образом:

let someLongRunningOperation = async { return Ok [1] }

И тогда вы вернете Async<Result>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...