System.Timers.Timer
sembra essere deprecato con .NET Core e ASP.NET core. Quindi prova a usare System.Threading.Timer
in future app.
EDIT: OK, mi permetta di essere più preciso:
Con il nuovo .NET Framework core, Microsoft interrotto alcune tecnologie di .NET Framework. Per capirlo: .NET Core è un framework totalmente nuovo - riscritto, multipiattaforma, ecc. Non voglio approfondire qui in dettaglio - per favore leggi lo .NET Blog.
Sul blog c'è un buon articolo sul porting su .NET Core che spiega anche le difficoltà che si possono raggiungere. Una parte di questo è usare lo .NET Portability Analyzer Visual Studio Add-In e correggere gli errori che si ottengono.
Per la classe System.Timers.Timer
, ha detto, che .NET Framework, versione = v4.6.2 è supportato, ma .NET Core Version = v5.0 e .NETPlatform, Version = v5.0 non è. Modifiche consigliate: Use System.Threading.Timer
.
Quindi mi sembra che lo System.Timers.Timer
sia andato per .NET Core.
P.S .: Ma potrebbe tornare - Microsoft ha annunciato che desidera apportare alcune modifiche a CoreCLR (il nome del framework che si utilizza per .NET Core) per semplificare lo sforzo di porting.
Penso che questo estratto sia illuminante: "A differenza di System.Windows.Forms.Timer, la classe System.Timers.Timer chiamerà, per impostazione predefinita, il gestore di eventi del timer su un thread di lavoro ottenuto dal Common Language Runtime (CLR) pool di thread. [...] La classe System.Timers.Timer fornisce un modo semplice per affrontare questo dilemma: espone una proprietà pubblica SynchronizingObject. Impostare questa proprietà su un'istanza di un Windows Form (o un controllo su un Windows Form) assicurerà che il codice nel gestore eventi Elapsed venga eseguito sullo stesso thread su cui è stato creato l'istanza di SynchronizingObject. " – mico
In base alla sezione sulla sicurezza dei thread in "Threading.Timer" [articolo MSDN] (http://msdn.microsoft.com/en-us/library/system.threading.timer%28v=vs.110%29. aspx), è perfettamente thread-safe ... – Pieter
'System.Threading.Timer' è" ironicamente "non thread-safe come' System.Threading.Thread' e i thread ottenuti attraverso il pool. Solo perché queste classi non ti tengono per mano e gestiscono l'uso della parola chiave 'lock' non significa che queste classi non siano a prova di bug. Si potrebbe anche dire "System.Threading.Thread" non è protetto da thread, perché è esattamente vero. –