Редактировать: Вы можете зарегистрировать только один уникальный ключ для каждого ответа. Вы запускаете эту строку кода внутри цикла while, поэтому он продолжает регистрировать тот же ключ. Вам нужно давать ему уникальный параметр key каждый раз, когда вы вызываете эту функцию. В вашем случае, возможно, вы можете иметь счетчик в цикле и добавить его к вашей ключевой строке
int i = 0;
while (Running)
{
Thread.Sleep(5000);
dtMessages = (String)(Cache.Get(key));
if (dtMessages == null)
{
//publish here
dtMessages = LoadMessages();
System.Diagnostics.Debugger.Log(0,null,dtMessages);
Page.ClientScript.RegisterStartupScript(this.GetType(),"ClientScript" + i.ToString(), "alert('hi');",true);
Console.WriteLine(dtMessages);
i++;
}
}