Несоответствующие данные по ThreadLocal<>
Я пытался добавить динамические строки в GridView, используя переменную ниже.
private static ThreadLocal<List<Product>> productList = null;
Ниже приведен обработчик событий, добавляющий строки динамически.
protected void Button1_Click(object sender, EventArgs e)
{
if (productList == null || productList.Value == null)
{
productList = new ThreadLocal<List<Product>>(() => new List<Product>());
}
productList.Value.Add(new Product { ProductID = 100, ProductName = "Product " + Thread.CurrentThread.Name, UnitPrice = 5000 });
GridView1.DataSource = productList.Value;
GridView1.DataBind();
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
public class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public decimal UnitPrice { get; set; }
}
Я нажимаю кнопку для добавления строк. Проблема в том, что до 5-6 строк данные загружаются корректно, затем снова строка становится 1 и после этого снова появляется с несколькими строками. Итак, я предполагаю, что потоки все еще пересекаются здесь, и между ними происходит потеря данных, чего не ожидается при использовании ThreadLocal<>. Любые комментарии?