J'ai une méthode asynchrone que j'écris et qui est censée interroger de manière asynchrone un port jusqu'à en trouver un, ou atteindre le délai de 5 minutes ;
member this.GetPort(): Async = this._GetPort(DateTime.Now)
member this._GetPort(startTime: DateTime): Async = async {
match this._TryGetOpenPort() with
| Some(port) -> port
| None -> do
if (DateTime.Now - startTime).TotalMinutes >= 5 then
raise (Exception "Impossible d'ouvrir un port")
else
do! Async.Sleep(100)
let! result = this._GetPort(startTime)
result}
member this._TryGetOpenPort(): Option =
// etc.
Cependant, je rencontre quelques incohérences de type étranges dans _GetPort
; la fonction indique que je renvoie un type de Async
au lieu de Async
.