Я пишу библиотеку классов, которая будет предлагать некоторую асинхронную обработку, и хочу попытаться избежать проблем с многопоточностью в дальнейшем. Поэтому я прислушиваюсь к любым предложениям, которые люди могут сделать, чтобы потом не столкнуться с проблемами, а вместо этого начать с хорошего дизайна.
Некоторые из ситуаций, которые я вижу, могут вызвать проблемы, и я не уверен, что лучший способ разрешить их:
1) У меня есть класс, который принимает IEnumerable и использует ToList для создания IList. T - это класс, объявленный как public в моей сборке. После запуска асинхронного процесса этот IList используется для создания новой коллекции, однако в этот момент вызывающая сборка может изменять исходные T, используемые для создания моей новой внутренней коллекции.
2) У меня есть логическое свойство, которое я ожидаю, что пользователь будет использовать в цикле опроса. Я вполне уверен, что это не будет проблемой для меня при установке свойства в моей сборке?
3) Я регулярно использовал внутреннюю коллекцию, которая должна использоваться в двух отдельных потоках. В настоящее время я планирую использовать синхронизированную коллекцию и клонировать ее всякий раз, когда мне понадобится копия ... хотя я надеюсь, что это не будет слишком медленным.
4) Во всем моем асинхронном методе я хочу запускать события всякий раз, когда изменяется прогресс или статус. Нужно ли знать о чем-либо при запуске событий из потоков обработки? Снова с некоторыми из них мне нужно передать переменную, которая будет воспринята как клон чего-то, что используется внутри потоков обработки, чтобы попытаться избежать каких-либо проблем с пользователем, изменяющим его.
Заранее благодарим за любую помощь!
Ian