Я пытаюсь заставить работать новую функцию SqlChangeMonitor, включенную в пространство имен System.Runtime.Caching, и получаю некоторые неожиданные результаты.
У меня есть простая настройка консольного приложения:
static void Main(string[] args)
{
var cacher = new Cacher();
cacher.Start();
Console.WriteLine("Watching for changes...");
while (true)
{
if (cacher.HasData)
{
Console.Write(".");
Thread.Sleep(1000);
}
else
{
Console.WriteLine();
Console.WriteLine("Cache EMPTY!");
Console.ReadLine();
cacher.Start();
}
}
}
Класс Cacher определяется следующим образом:
public class Cacher
{
private MemoryCache cache = new MemoryCache("test");
public Boolean HasData
{
get { return cache.Contains("data"); }
}
public void Start()
{
var connectionString = "Data Source=.;Initial Catalog=CachingTest;Integrated Security=True";
var list = new NameValueCollection();
var policy = new CacheItemPolicy();
SqlDependency.Start(connectionString);
using (var connection = new SqlConnection(connectionString))
{
using (var command = new SqlCommand("SELECT * FROM dbo.Table_1", connection))
{
var dependency = new SqlDependency(command);
connection.Open();
var reader = command.ExecuteReader();
while (reader.Read())
{
list.Add(reader["Name"].ToString(), reader["Value"].ToString());
}
var monitor = new SqlChangeMonitor(dependency);
policy.ChangeMonitors.Add(monitor);
}
cache.Add("data", list, policy);
}
}
}
Когда я запускаю код, я получаю сообщение Waiting и одну точку '.', Одну секунду задержки, затем "Cache Empty"сообщение.Это повторяется после того, как я нажимаю клавишу, чтобы перезапустить цикл.
Чего мне не хватает?