Ignoring Operation Result when using F# async Computation Expression
Consider this simple code downloading page contents using Puppeteer-sharp.
let renderHtml = async {
BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision) |> Async.AwaitTask |> ignore
let options = LaunchOptions()
options.Headless <- true
let! browser = Puppeteer.LaunchAsync(options) |> Async.AwaitTask
let! page = browser.NewPageAsync() |> Async.AwaitTask
page.GoToAsync("https://i.ua") |> Async.AwaitTask |> ignore
return! page.GetContentAsync() |> Async.AwaitTask
}
BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision) |> Async.AwaitTask |> ignore
await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
AggregateException
which in turn contains the following inner exception: “Chromium revision is not downloaded. Run BrowserFetcher.DownloadAsync or download Chromium manually”. Seems like we’ve called…
let! browser = Puppeteer.LaunchAsync(options) |> Async.AwaitTask
BrowserFetcher
result.
And indeed, in order to await async
call, we have to use let!
construct. The code below works as expected:
let renderHtml = async {
let! _ = BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision) |> Async.AwaitTask
let options = LaunchOptions()
options.Headless <- true
let! browser = Puppeteer.LaunchAsync(options) |> Async.AwaitTask
let! page = browser.NewPageAsync() |> Async.AwaitTask
let! _ = page.GoToAsync("https://i.ua") |> Async.AwaitTask
return! page.GetContentAsync() |> Async.AwaitTask
}