Почему Async.RunSynchronously висит? - PullRequest
0 голосов
/ 07 сентября 2018

В моем проекте f # я вызываю библиотеку c #, которая возвращает мне задачу. Когда я пытаюсь сделать это в моем проекте f #, ничего не происходит.

let str = getName() |> Async.AwaitTask |> Async.RunSynchronously

Однако, если я обновлю свой код для использования асинхронного рабочего списка, он больше не будет зависать. Что я делаю не так при вызове Async.RunSynchronously?

async {
     let! str = getName() |> Async.AwaitTask
     //Do something with str
}

1 Ответ

0 голосов
/ 10 сентября 2018

Во втором примере вы просто строите async рабочий процесс, но не на самом деле запускаете it.

Это разработанотаким образом, вы можете определить сложный рабочий процесс, не выполняя каждую его асинхронную часть немедленно, а вместо этого запустить все это, когда все будет хорошо и готово.

Чтобы запустить его, вам нужно вызвать Async.RunSynchronously или Async.StartAsTask:

async {
 let! str = getName() |> Async.AwaitTask
 //Do something with str
} |> Async.RunSynchronously

Кроме того, если вам нужно работать с Task s, вероятно, лучше использовать TaskBuilder.fs вместо Async.

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