Je vous écris un service F # qui utilise Quartz.Net au sondage un autre service (qui a été écrit en C#):Motif correspondant à DateTime.MinValue?
[<PersistJobDataAfterExecution>]
[<DisallowConcurrentExecution>]
type PollingJob() =
interface IJob with
member x.Execute(context: IJobExecutionContext) =
let uri = "http://localhost:8089/"
let storedDate = context.JobDetail.JobDataMap.GetDateTime("LastPoll")
//this works...
let effectiveFrom = (if storedDate = DateTime.MinValue then System.Nullable() else System.Nullable(storedDate))
let result = someFunction uri effectiveFrom
context.JobDetail.JobDataMap.Put("LastPoll", DateTime.UtcNow) |> ignore
Le context
est passé à la fonction Execute
par Quartz pour chaque sondage et contient un dictionnaire. La première fois que le service exécute la valeur LastPoll
sera la valeur par défaut DateTime
, c'est-à-dire 01/01/0001 00:00:00
. Ensuite, la prochaine fois que le planificateur s'exécutera LastPoll
contiendra l'heure du dernier sondage.
je peux créer un Nullable<DateTime>
en utilisant la if..then..else
construction (ci-dessus), mais lorsque je tente d'utiliser ltrage je reçois une erreur de compilation avec un gribouillis sous DateTime.MinValue
:
Ce champ n'est pas un littéral et ne peut pas être utilisé dans un modèle
Le code que je suis en train d'utiliser est la suivante:
//this doesn't...
let effectiveFrom =
match storedDate with
| DateTime.MinValue -> System.Nullable()
| _ -> System.Nullable(storedDate)
Cela fonctionne parfaitement, merci toi. Et merci pour le lien. –