Frage

Mit diesem Code Betrachten ...

using System.Threading;
//...
Timer someWork = new Timer(
    delegate(object state) {
        //Do some work here...
    },
    null, 0, 60000);

HttpContext.Current.Application["SomeWorkItem"] = someWork;

Könnte dies gefährlich sein? Das Caching einen Timer in der Anwendung etwas Arbeit im Hintergrund auszuführen, während Ihre Website läuft sicher scheint, aber ich fragte mich, ob jemand etwas Erfahrung mit dieser hat.

Ich bin sicher, dass ein Service-Schreiben im Hintergrund läuft sicherlich viel besser wäre, aber das ist manchmal nicht immer eine Option. Ist das eine Alternative?

War es hilfreich?

Lösung

Das wäre eine schlechte Idee im Allgemeinen, wie System.Threading.Timer Threads aus dem Threadpool verwendet, die gleichen wie ASP.Net.

Wenn für was auch immer Ihr Timer Delegierten blockiert oder stoppt Grund der Timer einfach einen neuen Thread nach der Timeout-Zeit beginnen, die für ASP.net in die Themen essen.

Wenn sie alle blockieren beginnen, effektiv werden Sie nicht in der Lage sein, noch mehr Web-Anfragen zu bedienen (wahrscheinlich eine schlechte Sache)

Andere Tipps

Das Problem dabei ist, dass Sie nicht den Prozess noch am Leben garantiert werden. IIS wird den Prozess grundsätzlich zurückfordern, wenn es, wie es sich anfühlt, so dass Sie laufen Gefahr, nicht durchgeführt wird.

Wenn Sie diese Arbeit benötigen, dann müssen Sie entweder Code, um es in einen Web-Aufruf oder einen Dienst im Hintergrund des Servers ausgeführt haben.

Das wäre gefährlich sein, da kann es vorkommen, dass der Arbeitsprozess oder die AppDomain Abstürze recycelt wird und das Work Item getötet werden und Sie möchten es erholen, was es tat, ist es unter Umständen nicht möglich.

Ein Windows-Dienst kann in Ordnung sein, wenn Sie diese Workitem in einen Dienst heraus zu bekommen. Wenn ein Httpcontext für die Arbeit erforderlich ist, wenn Sie ein Windows-Service-Aufruf eine Webservice haben möchten den Anruf zu tun, in regelmäßigen Abständen das funktionieren kann, obwohl wahrscheinlich nicht ideal.

Das macht Sinn, aber nur zum Spaß, was passiert, wenn die Arbeit muss nicht ausgeführt werden, wenn die Site heruntergefahren wird? Wenn es mit dem Application_Start Ereignis verknüpft ist und muss nur ausgeführt werden, während die Menschen die Website durchsuchen, was sind die Risiken an diesem Punkt?

Gute Antworten, ich bin nur neugierig ein wenig mehr darüber, wie das funktioniert auf der Innenseite.

Ich möchte Sie Setup eine geplante Aufgabe empfehlen eine Seite auf Ihrer Website auszuführen. Ich in der Regel weisen die geplante Aufgabe einer VBS-Datei mit dem folgenden:

On Error Resume Next
Dim objRequest
Dim URL

Set objRequest = CreateObject("Microsoft.XMLHTTP")
URL = "http://www.mywebsite.com/cron/pagetorun.ashx"

objRequest.open "POST", URL , false

objRequest.Send

Set objRequest = Nothing

Omar Al Zabir hat einen ausgezeichneten Beitrag zur Verwendung von Cache-Element Rückrufe für diesen Zweck.

http://www.codeproject.com/KB/aspnet/ASPNETService.aspx?fid=229682&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=76&select=1334820

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top