У меня есть следующий сценарий:
Допустим, у нас есть две разные веб-части, работающие с одними и теми же данными - одна представляет собой круговую диаграмму, другая представляет собой таблицу данных.
в своей Page_Load они асинхронно загружают данные из базы данных, а при загрузке помещают их в кэш приложения для дальнейшего использования или использования другими веб-частями. Таким образом, каждая из веб-частей имеет код, подобный следующему:
protected void Page_Load(object sender, EventArgs e)
{
if (Cache["dtMine" + "_" + Session["UserID"].ToString()]==null)
{
...
Page.RegisterAsyncTask(new PageAsyncTask(
new BeginEventHandler(BeginGetByUserID),
new EndEventHandler(EndGetByUserID),
null, args, true));
}
else
{
get data from cache and bind to controls of the webpart
}
}
Поскольку обе веб-части работают с одними и теми же данными, мне не имеет смысла выполнять код дважды.
Каков наилучший подход к тому, чтобы одна веб-часть взаимодействовала с другой "я уже извлекаю данные, поэтому просто подождите, пока я не помещу их в кэш"?
Я рассматривал мьютекс, блокировку, присвоение временного значения элементу кэша и ожидание, пока это временное значение не изменится ... много опций - какой из них мне следует использовать.