Вы можете вызвать действие в новом потоке:
if(!isCached(query))
{
new Thread(SearchAsync).Start();
}
Представление может использовать вызов AJAX для действия, которое проверяет, доступны ли результаты:
public ActionResult Done(string query)
{
return Json(new
{
isDone = !isCached(query),
result = Cache.Get(query)
});
}
И пинг:
var intId = setInterval(function() {
$.getJSON('/search/done', { query: 'some query' }, function(json) {
if (json.isDone) {
clearInterval(intId);
// TODO : exploit json.result
} else {
// TODO: tell the user to wait :-)
}
});
}, 2000);