{"id":366,"date":"2016-03-19T11:01:10","date_gmt":"2016-03-19T10:01:10","guid":{"rendered":"http:\/\/www.steffen-liersch.de\/content\/de\/?p=366"},"modified":"2025-03-02T11:30:18","modified_gmt":"2025-03-02T10:30:18","slug":"timer-sicher-beenden","status":"publish","type":"post","link":"https:\/\/www.steffen-liersch.de\/content\/de\/2016\/03\/timer-sicher-beenden\/","title":{"rendered":"Sicheres Beenden von Timer-Instanzen"},"content":{"rendered":"<p>Die Klasse System.Threading.Timer verf\u00fcgt \u00fcber eine parameterlose Dispose-Funktion zur Freigabe. Laut Dokumentation sind jedoch Timer-Ereignisse nach der Freigabe m\u00f6glich. Deshalb sollte die parameterlose Variante der Dispose-Funktion besser nicht benutzt werden.<!--more--><\/p>\n<p>Die alternative Dispose-Funktion erwartet ein Ereignis (WaitHandle), das signalisiert wird, sobald die Freigabe abgeschlossen ist. So kann nach dem Aufruf dieser Dispose-Funktion auf das Ereignis gewartet werden. Auf den ersten Blick scheint dies eine gute L\u00f6sung zu sein.<\/p>\n<p>Durch Tests kann jedoch nachgewiesen werden, dass es im Zusammenhang mit der Change-Funktion offensichtlich ein weiteres nicht wirklich dokumentiertes Problem gibt. So k\u00f6nnen unerwartete Timer-Ereignisse nach Signalisierung des Abschlusses der Freigabe beobachtet werden.<\/p>\n<p>Dieser Effekt ist logisch und zu erwarten, da Timer-Ereignisse unabh\u00e4ngig von vorherigen Timer-Ereignissen auftreten k\u00f6nnen. Wenn eine Timer-Funktion sek\u00fcndlich aufgerufen werden soll, so wird diese auch dann aufgerufen, wenn der vorherige Aufruf noch nicht abgeschlossen ist. Derartige Programme sind jedoch schwer zu kontrollieren und zu synchronisieren und sollten deshalb vermieden werden.<\/p>\n<p>Wenn feststeht, dass Folgeaufrufe der Timer-Funktion erst dann erfolgen sollen, wenn der jeweils vorherige Aufruf vollst\u00e4ndig abgeschlossen ist, muss folgendes beachtet werden:<\/p>\n<ul>\n<li>keine periodische Aufrufe anfordern (period-Parameter ist immer Timeout.Infinite)<\/li>\n<li>Change, Dispose und die Timer-Funktion selbst synchronisieren (z.B. mit lock)<\/li>\n<li>Aufrufe der Timer-Funktion nach Freigabe ignorieren<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Die Klasse System.Threading.Timer verf\u00fcgt \u00fcber eine parameterlose Dispose-Funktion zur Freigabe. Laut Dokumentation sind jedoch Timer-Ereignisse nach der Freigabe m\u00f6glich. Deshalb sollte die parameterlose Variante der Dispose-Funktion besser nicht benutzt werden.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28],"tags":[21,15,20],"class_list":["post-366","post","type-post","status-publish","format-standard","hentry","category-multi-threading","tag-net","tag-components","tag-multi-threading"],"_links":{"self":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/comments?post=366"}],"version-history":[{"count":13,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/366\/revisions"}],"predecessor-version":[{"id":450,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/366\/revisions\/450"}],"wp:attachment":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/media?parent=366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/categories?post=366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/tags?post=366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}