1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import std/asyncdispatch
- # bug #22210
- type
- ClientResponse = object
- status*: int
- data*: string
- proc subFoo1(): Future[int] {.async.} =
- await sleepAsync(100)
- return 200
- proc subFoo2(): Future[string] {.async.} =
- await sleepAsync(100)
- return "SOMEDATA"
- proc testFoo2(): Future[ClientResponse] {.async.} =
- var flag = 0
- try:
- let status = await subFoo1()
- doAssert(status == 200)
- let data = await subFoo2()
- result = ClientResponse(status: status, data: data)
- finally:
- inc flag
- await sleepAsync(100)
- inc flag
- await sleepAsync(200)
- inc flag
- doAssert flag == 3
- discard waitFor testFoo2()
- proc testFoo3(): Future[ClientResponse] {.async.} =
- var flag = 0
- try:
- let status = await subFoo1()
- doAssert(status == 200)
- let data = await subFoo2()
- if false:
- return ClientResponse(status: status, data: data)
- finally:
- inc flag
- await sleepAsync(100)
- inc flag
- await sleepAsync(200)
- inc flag
- doAssert flag == 3
- discard waitFor testFoo3()
- proc testFoo4(): Future[ClientResponse] {.async.} =
- var flag = 0
- try:
- let status = await subFoo1()
- doAssert(status == 200)
- let data = await subFoo2()
- if status == 200:
- return ClientResponse(status: status, data: data)
- else:
- return ClientResponse()
- finally:
- inc flag
- await sleepAsync(100)
- inc flag
- await sleepAsync(200)
- inc flag
- doAssert flag == 3
- discard waitFor testFoo4()
|