GetAsync on an
HttpClient and then using it with
Async.AwaitTask. I am then piping that
Async<HttpResponseMessage> into some retry logic, which should re-evaluate the
Async<HttpResponseMessage> if it has a non-200 status code. However, it retains its Task-like behavior (using the completed/cached result) instead of making the call again (like I would expect if it were a normal
Async. Does anybody know of an
AwaitTask implementation that provides the behavior I’m looking for, where the
Task will be re-evaluated also?
I ended up solving this by putting the creation of the Task into an Async. Curious to know if there’s another way of doing this though.
It’s going to be very hard, because by definition a
Task is an one-time action. It caches the result of that single run in the
Result property, and the Task itself has no idea what caused it to be spawned (ie is it an http-request Task, or a database call, etc). If you want to be able to use a retry-able task, you either need to have some kind of Task-generator (a function of type
unit -> Task<'t>) that gets passed into your initial Async-creating function, or rewrite the operation in terms of an Async in the first place.