Ich schreibe eine Klassenbibliothek, die einige asynchrone Verarbeitung bieten wird, und wollen versuchen und vermeiden, in Threading Probleme später auf der Linie laufen. Also ich bin nach alle Vorschläge, die Menschen machen können, um zu vermeiden, in Probleme später laufen, und stattdessen mit einem guten Design starten.
Ich sehe einige Situationen, die zu Problemen führen könnten, und bin mir nicht unbedingt sicher, wie sie am besten zu lösen sind:
1) Ich habe eine Klasse, die eine IEnumerable nimmt und eine ToList verwendet, um eine IList zu konstruieren. Die T's sind eine als öffentlich deklarierte Klasse innerhalb meiner Assembly. Beim Starten eines asynchronen Prozesses wird diese IList verwendet, um eine neue Auflistung zu erstellen. Zu diesem Zeitpunkt kann die aufrufende Assembly jedoch die ursprünglichen T's ändern, die zur Erzeugung meiner neuen internen Auflistung verwendet werden.
2) Ich habe eine boolesche Eigenschaft, von der ich erwarte, dass der Benutzer sie in einer Abfrageschleife verwendet. Ich bin ziemlich sicher, dass dies nicht ein Problem mit mir sein wird, die Eigenschaft in meiner Assembly zu setzen?
3) Ich habe regelmäßig eine interne Auflistung verwendet, die auf zwei getrennten Threads verwendet werden muss. Ich plane derzeit eine synchronisierte Sammlung zu verwenden und klonen Sie es, wenn ich eine Kopie benötigen... obwohl ich hoffe, dass dies nicht zu langsam sein wird.
4) In meiner asynchronen Methode möchte ich Ereignisse auslösen, wenn der Fortschritt oder Status ändert. Muss ich etwas beachten, wenn Ereignisse von Verarbeitungsthreads ausgelöst werden? Wieder mit einigen von diesen muss ich eine Variable übergeben, die als ein Klon von etwas intern innerhalb der Verarbeitung Threads verwendet werden, um zu versuchen und alle Probleme mit dem Benutzer ändern es zu vermeiden.
Vielen Dank im Voraus für jede Hilfe!
Ian