我想完成以下任务:
class SearchController : AsyncController
{
public ActionResult Index(string query)
{
if(!isCached(query))
{
// here I want to asynchronously invoke the Search action
}
else
{
ViewData["results"] = Cache.Get("results");
}
return View();
}
public void SearchAsync()
{
// some work
Cache.Add("results", result);
}
}
我打算从客户端进行AJAX“ping”以了解结果何时可用,然后显示它们。
但我不知道如何以异步方式调用异步Action!
非常感谢你。 路易斯
答案 0 :(得分:0)
您可以在新线程中调用该操作:
if(!isCached(query))
{
new Thread(SearchAsync).Start();
}
视图可以使用AJAX调用来检查结果是否可用的操作:
public ActionResult Done(string query)
{
return Json(new
{
isDone = !isCached(query),
result = Cache.Get(query)
});
}
ping:
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);