25 lines
703 B
Nim
25 lines
703 B
Nim
## Make two http requests concurrently and output the one that wins
|
|
|
|
import chronos
|
|
import ./httpget
|
|
|
|
proc twoGets() {.async.} =
|
|
let
|
|
futs = @[
|
|
# Both pages will start downloading concurrently...
|
|
httpget.retrievePage("https://duckduckgo.com/?q=chronos"),
|
|
httpget.retrievePage("https://www.google.fr/search?q=chronos")
|
|
]
|
|
|
|
# Wait for at least one request to finish..
|
|
let winner = await one(futs)
|
|
# ..and cancel the others since we won't need them
|
|
for fut in futs:
|
|
# Trying to cancel an already-finished future is harmless
|
|
fut.cancelSoon()
|
|
|
|
# An exception could be raised here if the winning request failed!
|
|
echo "Result: ", winner.read()
|
|
|
|
waitFor(twoGets())
|