In .NET wie kann ich wissen, ob eine Klasse oder Methode threadsicher ist oder nicht? Ist es standardmäßig nicht threadsicher?Gibt es ein Attribut, um die Klasse oder Methode in .NET Thread-sicher zu markieren?
Antwort
Dies ist kein Attribut dafür: Sie müssen die Dokumentation für jedes Element, das Sie interessieren, lesen. Sie können nichts threadsicher machen, indem Sie einfach ein Attribut hinzufügen. Das ist, als würde man eine Orange nehmen und einen Aufkleber darauf anbringen, der "Apple" sagt.
Natürlich gilt das Gleiche für die Serialisierung und es hat sie dort nicht gestoppt, aber immer noch: kein Attribut. Lesen Sie die Dokumentation.
Alle statischen Methoden und Eigenschaften werden standardmäßig Thread-sicher angenommen (dh wenn nicht anders dokumentiert), zum Beispiel Methoden die Annahme ist, dass sie nicht sind. – Richard
Angenommen, eine Methode ist nicht Thread sicher, wenn es keinen Schaden verursacht, vorausgesetzt, dass eine Thread sicher ist, wenn es nicht böse sein kann. Es ist besser, nichts zu befürchten, solange es nicht angezeigt wird. – JoshBerke
Ich habe Joel Coehoorn auf diesen einen zurück, wäre leicht zu fälschen solche Ansprüche.
Warum den THREAD Text in der Funktionsbeschreibung nicht hinzufügen
Ich würde mir nicht so viele Sorgen machen, dass ich es "vortäusche". Aber Nebenläufigkeit ist schwer: Es wäre sehr wahrscheinlich, dass ein Fehler durch ist und dieses Attribut nur falsch ist. –
Aber wenn das Attribut falsch ist, ist es wahrscheinlich, dass die Dokumentation (falls vorhanden) genauso falsch ist. –
Ich stimme @JimMischel völlig zu, aber Joel war nicht derjenige, der für die Dokumentation eintrat. Zumindest Attribute sind maschinenlesbar, was zumindest eine automatische Aufzählung, Filterung, Berichterstellung usw. der zugeordneten Methoden und möglicherweise sogar einige schwache Formen der statischen Analyse und/oder Fehlervermeidung erlaubt.Attribute sind der Weg zu gehen, aber Sie würden ein ausgeklügeltes und umfassendes System von ihnen benötigen, um die Nebenläufigkeitssemantik in irgendeiner wirklich nützlichen Weise zu erfassen. Für .NET ist mir kein Design oder Vorschlag bekannt. –
Es gibt kein Szenario eine Klasse synchronisiert zu machen, als Anwendungsfall ist man Codierstil verwenden folgenden weit Verfahren betrifft:
using System.Runtime.CompilerServices;
[MethodImpl(MethodImplOptions.Synchronized)]
void MyMethod()
{
DoSomething();
}
Das Problem ist; das impliziert noch immer nicht, dass die Methode threadsicher ist - weil ein anderer Thread eine andere Methode aufrufen könnte, die * nicht die Methode [MethodImpl] hat und sich somit gegenseitig verwirft. Selbst wenn alle Felder schreibgeschützt sind, können Felder auf untergeordneten Objekten ebenfalls veränderbar sein und Probleme verursachen. –
Auch wenn dieser sogenannte "Coding-Stil" * etwas bedeuten könnte (siehe zahlreiche andere Kommentare auf dieser Seite), hat das 'MethodImplOptions.Synchronized'-Flag die gegenteilige Bedeutung dessen, wonach das OP sucht. Dieses Flag soll anzeigen, dass die Methode ** nicht ** Thread-sicher ist. Aus der Dokumentation: "Die Methode kann nur von jeweils einem Thread ausgeführt werden." –
Es ist möglich, um alle Zugriff auf Ihr Objekt serielle über IContributeObjectSink/IContextAttribute
zu machen, obwohl dies von einem großen Leistungseinbruch leiden wird, da es Ihr Objekt zur Unterklasse MarshalByRefObject
, Context Creation Overhead, etc ...
Nein, und es wäre sinnlos.
Nehmen wir an, ich einen Thread-sicher-Liste haben, hat es drei Thema Safe ™ Methoden:
void Add(something);
void Remove(index);
int GetCount();
something GetElementAt(index);
Thema ein:
for 1 to 100 do
list.Add(12);
Thema zwei und drei:
while(list.GetCount() >0)
{
list.Remove(0);
}
Der obige Code stürzt (früher oder später) ab, da sich die Liste zwischen dem Zeitpunkt GetCount
und Remove
- 1. Ist .NET System.Net.CookieContainer threadsicher?
- 2. Gibt es ein Attribut, um Kaskadeneinheitstestfehler in MSTest zu vermeiden?
- 3. Gibt es ein .Net-Attribut, um die Eigenschaftenauswertung im Debugger zu verhindern?
- 4. Gibt es ein Framework-Attribut, um ein Mitglied vor der Reflektion in .Net zu verbergen?
- 5. Gibt es in .NET ein OpenFileOrFolderDialog-Objekt?
- 6. Gibt es ein Framework für .NET, um Testdaten zu füllen?
- 7. Gibt es eine .NET-Funktion, um einen Klassennamen zu validieren?
- 8. Welche Eigenschaften einer Methode kann ich verwenden, um zu überprüfen, ob es threadsicher ist oder nicht?
- 9. Gibt es ein .Net-Äquivalent zu java.util.concurrent.Executor?
- 10. Die CA2104-Warnung: Gibt es eine Möglichkeit, eine Klasse als 'unveränderlich' zu markieren, um sie zu unterdrücken?
- 11. Gibt es eine Möglichkeit, die Rückgabeanweisung einer Methode zu analysieren, um ein bestimmtes Wort zu erkennen?
- 12. Gibt es eine Methode, um ein solches Wasserzeichen zu entfernen?
- 13. Gibt es in Excel eine .NET-Methode, die NETWORKDAYS entspricht?
- 14. Gibt es ein Conditional-Attribut auf Klassenebene?
- 15. Attribut oder Methode?
- 16. Gibt es ein vordefiniertes Ereignis, um zu markieren, dass ein Objekt ungültig gemacht wurde?
- 17. VS, um alle .Net 3.5 SP1-Methodenaufrufe zu markieren
- 18. Gibt es ein eingebautes Name/Wert-Paar-Attribut?
- 19. Es gibt kein Key-Attribut in EF CTP 5
- 20. Gibt es eine .NET-Klasse, die Operator-Typen darstellt?
- 21. Gibt es in .NET ein integriertes Protokollierungsframework?
- 22. Gibt es ein RRDTool .net gleichwertig
- 23. ist es möglich, überschriebene Methode als endgültig zu markieren
- 24. Gibt es ein COM oder .Net SDK für Rational Rose?
- 25. Gibt es ein Tool, um ein Subversion-Repository über .net zu lesen?
- 26. In C# .Net Gibt es ein Fensterhandle, um ein Fenster auf Vollbild zu erzwingen?
- 27. Attribut hinzufügen, um Python-Klasse
- 28. Ist es eine Methode oder eine Klasse?
- 29. Ein implizites Argument innerhalb einer Methode markieren
- 30. Gibt es eine schnellste Methode, um edmx zu aktualisieren?
ändern kann. Welchen Zweck soll ein solches Attribut erfüllen? – AnthonyWJones
Kann eine Art Codedokumentation sein, um den Klassenbenutzer zu warnen. –
Wenn er nur Dokumentation möchte, kann er sie in den Bereich setzen. –