2008-11-07 9 views
46

Was sind die Unterschiede zwischen CallContext und ThreadStatic?CallContext vs ThreadStatic

Ich habe verstanden, dass in einer ASP.NET-Umgebung in CallContext gespeicherte Daten in der gesamten Anforderung bis zum Ende gespeichert bleiben können, während ThreadStatic funktioniert oder nicht, da die Anforderung Threads wechseln kann. Ich habe auch gelernt, dass der HttpContext intern mit dem CallContext gespeichert wird.

In einer regelmäßigen Anwendung sowohl sie scheinen überall in dem gleichen Thread Aufruf zu beharren. Wann ist das nicht der Fall?


Edit: In den Kommentaren habe ich gelernt, dass der Anruf Kontext ist eine Abstraktion über einen Thread statischen Speicher. Das ASP.NET-Framework verschiebt die Daten explizit von einem Thread zum nächsten, der eine Anforderung verarbeiten soll. Ein anderes Framework, das Thread-Agilität bereitstellen möchte, könnte dasselbe für den kontextbezogenen Speicher tun.

Antwort

30

Sehr oft wird eine Anfrage den gleichen Thread überall verwenden, aber es wird sicherlich nicht immer der Fall sein - ASP.NET zeigt Thread Agilität. Es gibt eine wirklich nützliche Diskussion darüber auf der Spring.NET forums. Dies bezieht sich auf eine in-depth blog article about the matter. Ich vermute, dass in mehr Details geht, als Sie hier bekommen :)

Welche widersprüchlichen Informationen haben Sie, aus Interesse sehen?

+0

Dieser spring.net Thread war in meinem Hinterkopf, als ich fragte (Punkte für die Verknüpfung). Ich habe besonders nach Details gesucht, die sich auf den Nicht-Web-Fall beziehen. Sind sie im Wesentlichen gleich? –

+0

Was meinen Sie mit dem Nicht-Web-Fall? Es hängt wirklich davon ab, was Sie tun - wenn Sie wissen, dass Sie in einem einzigen Thread sind, ist es in Ordnung ThreadStatic zu verwenden. –

+0

Ich meine eine Anwendung, die nicht von den ASP.NET-Abstraktionen betroffen ist. CallContext und ThreadStatic scheinen auf die gleiche Weise zu funktionieren, d. H. Sie scheinen dieselbe Lebensdauer zu haben. Ich bin daran interessiert, die Unterschiede zwischen den beiden zu lernen. –

12

Als ThreadStatic gespeicherte Elemente sind für mehrere Anforderungen verfügbar. IIS verwendet den Thread erneut, nachdem eine Anforderung abgeschlossen wurde, um nachfolgende Anforderungen zu verarbeiten. Es kann sogar während der Verarbeitung eine Anforderung von einem Thread auf einen anderen austauschen. ASP.Net löscht den CallContext nach jeder Anfrage.

+3

Es ist mehr als dass, obwohl - eine Anforderung über Threads hüpfen kann, so was Sie in einem Threadstatic in einer Phase setzen nicht in einem anderen zur Verfügung . –

+1

Mit welchem ​​Mechanismus wird der Aufrufkontext zwischen Threads aufrechterhalten, die dieselbe Anforderung bedienen? –

+3

ASP.NET Thread Agilität Handhabung, im Grunde genommen. Ich vermute, dass es intern ein ThreadStatic ist, und wenn ein Thread aufhört, aus irgendeinem Grund mit einer Anfrage zu arbeiten, hält ASP.NET die Anfrage und den Kontext zusammen und setzt sie dann in jedem Thread, der die Arbeit aufnimmt, zurück. –

Verwandte Themen