Ich schreibe eine Klassenbibliothek, die einige asynchrone Verarbeitung bietet, und versuchen möchten, zu vermeiden, später in Threading-Probleme zu führen. Also bin ich hinter irgendwelchen Vorschlägen her, die Leute machen können, um später Probleme zu vermeiden, und stattdessen mit einem guten Design anfangen.Alle Tipps zu Threading-Überlegungen + Design für folgende Fälle
Einige der Situationen, die ich, dass Probleme verursachen könnten sehen können, und ich bin nicht neccessairly sicher, dass die beste Art und Weise zu lösen:
1) Ich habe eine Klasse, die eine IEnumerable und verwendet eine ToList nimmt eine IList zu konstruieren . Die T sind eine Klasse, die in meiner Versammlung als öffentlich deklariert ist. Nach dem Start eines asynchronen Prozesses wird diese IList zum Erstellen einer neuen Sammlung verwendet. An dieser Stelle ändert die aufrufende Assembly jedoch möglicherweise die ursprünglichen Ts, die zum Generieren meiner neuen internen Sammlung verwendet wurden.
2) Ich habe eine boolesche Eigenschaft, die der Benutzer in einer Abfrage-Schleife erwartet. Ich bin ziemlich sicher, dass dies kein Problem sein wird, wenn ich die Eigenschaft in meiner Assembly einstelle.
3) Ich habe regelmäßig eine interne Sammlung verwendet, die auf zwei separaten Threads verwendet werden muss. Ich plane derzeit, eine synchronisierte Sammlung zu verwenden und sie zu klonen, wann immer ich eine Kopie brauche ... obwohl ich hoffe, dass das nicht zu langsam wird.
4) Während meiner asynchronen Methode möchte ich Ereignisse auslösen, wenn sich der Fortschritt oder Status ändert. Muss ich etwas beachten, wenn Ereignisse von der Verarbeitung von Threads ausgelöst werden? Wiederum mit einigen von diesen muss ich eine Variable übergeben, die als ein Klon von etwas genommen wird, das intern in den Verarbeitungsthreads verwendet wird, um zu versuchen, Probleme mit dem Benutzer zu vermeiden, der es ändert.
Vielen Dank im Voraus für jede Hilfe!
Ian