2013-10-04 3 views
1

В приведенном ниже коде вложенные объекты объектно-безопасные? Если код вызова вносит изменения в объект вложений, а приложение работает с несколькими потоками, что может случиться?Является ли этот класс/метод C# безопасным потоком и одновременным доступом безопасным?

Спасибо.

public static class Util { 
    public static int AddMessage(string message, IEnumerable<FileAttachment> attachments, Dictionary<int, object> customFieldValues = null, int? assigneeUserId = null) { 
     foreach (FileAttachment current2 in attachments) { 
      //do something 
     } 
    } 
} 

ответ

2

В приведенном ниже коде, вложения объекта потокобезопасной? И если код вызова вносит изменения в объект вложений, а приложение работает с несколькими потоками, что может случиться?

Нет ничего, что указывало бы на то, что attachments является потокобезопасным. Если другие потоки имеют доступ к этим экземплярам и изменяют свойства внутри этих объектов, могут возникнуть плохие вещи.

Простой пример - если фактическая перечислимы случается быть List<T>, а другой поток добавляет или удаляет вложение, цикл foreach выбросит, как он перебирает из-за основной коллекции меняющегося ...

+0

Спасибо. И если этот код размещен на веб-сайте, размещенном под II, а несколько пользователей одновременно получают доступ к одной и той же странице (я имею в виду один и тот же код), что может произойти? является ли это одновременным доступом к веб-сайту, размещенному под II? – stacker

+0

@stacker, если вы используете ASP.NET, должны знать, что рабочий процесс может в любой момент переработать, в результате чего ваши данные в памяти будут потеряны без предупреждения. – usr

+0

@stacker Нет никакого способа узнать, является ли это потокобезопасным или нет кодом, но если вы работаете с общими/статическими данными, это скорее всего не будет потокобезопасным. –

Смежные вопросы