У меня есть класс вроде этого.Является ли следующий код потоком безопасным
public abstract class HtmlObject<T>
{
public HtmlObject() {}
public HtmlObject(string id, string name, T value)
{
this.ID = id;
this.Name = name;
this.Value = value;
}
public string ID { get; set; }
public string Name { get; set; }
public T Value { get; set; }
public abstract string Build();
}
С конкретной реализацией, которая выглядит так.
public class HtmlRadio : HtmlObject<string>
{
private const string RadioHtml = "<input type='radio' name='{0}' value='{1}' {2} />{1}<br />";
public bool Checked { get; set; }
public override string Build()
{
if (this.Checked)
return string.Format(HtmlRadio.RadioHtml, this.Name, this.Value, "checked='checked'");
else
return string.Format(HtmlRadio.RadioHtml, this.Name, this.Value, string.Empty);
}
}
И то, что я хочу знать, если вызов Build()
будет безопасным, если сделано через потоки. Мое предположение, что не будет, потому что, если я возьму следующую серию вызовов
HtmlRadio radio = new HtmlRadio();
radio.Checked = false;
//Something could happen here?
string result = radio.Build();
Я понимаю, что значение radio.Checked
может измениться между его быть установлен и вызов Build()
, это правильно? Если да, то как я мог бы «исправить» это, если бы захотел?
Что именно вы думаете, «может произойти здесь»? – Chris
У вас есть последовательность действий здесь, где порядок имеет значение. Threading лучше всего, когда заказ * не имеет значения. Вам нужно будет сделать некоторую работу, чтобы убедиться, что 'Build' вызывается только после * свойства, которое было установлено ..., которое очень похоже на то, чтобы не нарезать его вообще. –