2013-10-12 3 views
9

Я использую asp.net mvc, и я хочу кэшировать некоторые данные о пользователе из базы данных, когда он достигает главной страницы сайта. Итак, когда пользователь запрашивает главную страницу, я хочу вызвать метод async, который вызывает вызовы базы данных и данные кэширования.Запуск задачи без ожидания

Любые примеры этого были бы замечательными.

+1

Вы что-то пробовали? – SpringLearner

ответ

0
ThreadPool.QueueUserWorkItem((Action<object>)state => 
{ 
    //do your async work 
}, null); 

или Task.StartNew(...)

(извините за краткий ответ, это может занять вас на правильном пути, или кто-то может изменить это, чтобы показать полный пример, пожалуйста?)

+0

Можете ли вы мне помочь и в кеше? Скажем, мне требуется 2 секунды для кэширования данных с помощью моей Task.StartNew (...). Если пользователь получает доступ к этим данным до 2 секунд, как бы заставить поток ждать, пока полные данные будут прочитаны из базы данных и кэшированы. – user2873833

+0

в этом случае вы сохранили бы задачу в статическом списке/словаре и проверили бы, будет ли задача уже доступна. В этом случае вызовите задачу. Подождите, а затем извлеките Task.Result или получите доступ к вашему кеш-объекту. (кстати, не пропустите HttpUtility.Cache) – eFloh

15
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
    ViewData["Message"] = "Welcome to ASP.NET MVC!"; 

    Task.Run(()=> DoSomeAsyncStuff()); 

    return View(); 
    } 

    private async void DoSomeAsyncStuff() 
    { 

    } 
} 
+0

Это работало для меня, когда 'DoSomeAsyncStuff()' сам по себе просто висел. Я пытался получить что-то, как описано [здесь] (http://farazdagi.com/blog/2014/rest-long-running-jobs/). – OutstandingBill

1

I скажем, вы вызываете метод кеширования посредством этого:

HostingEnvironment.QueueBackgroundWorkItem(x=> CacheData()); 

Таким образом, вы не действительно сохраняйте запрос домашней страницы, чтобы пользователи сразу увидели домашнюю страницу, а кеширование происходит в фоновом режиме на сервере.

PS: Но да, у вас небольшой риск перезагрузки домена приложения, завинчивающий вашу кеширующую нить.

Смежные вопросы