Несоответствующие данные по 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<>. Любые комментарии?

0 ответов

Другие вопросы по тегам