синхронизация потоков между действиями mvc3 - PullRequest
0 голосов
/ 24 февраля 2012

вот мой код

 public ActionResult Index()
    {
        ViewBag.Message = "Welcome to ASP.NET MVC!";
        Thread t1 = new Thread(DoLengthyOperation);
        t1.Start();
        return View();
    }

    public ActionResult About()
    {
        //Check if thread t1 is completed or not, if not keep waiting.
        return View();
    }
    public void DoLengthyOperation()
    {
        Thread.Sleep(10000);
    }

То, что я хочу сделать, это
1) Запустить длинный процесс в действии Home, так как этот процесс ничего не возвращает, поэтому нет смысла ждать
2) в моем действии «О программе» я хочу проверить, завершен ли процесс. Действие «Домой» завершено или нет, если нет, то дождитесь его завершения.
Я пробовал статический экземпляр, но это не поможет с одновременным запросом,
Я также попробовал глобальную переменную, но это не помогло, так как каждый запрос получает новую копию контроллера.
моя конечная цель - когда пользователь смотрит на индексную страницу, мой длительный процесс должен завершиться в фоновом режиме, мой процесс займет 20 секунд.
Любая помощь будет принята,
Спасибо

1 Ответ

0 голосов
/ 24 февраля 2012

Используйте задачу и сохраните ее в словаре состояния сеанса.

public ActionResult Index()
{
    ViewBag.Message = "Welcome to ASP.NET MVC!";
    var longRunningTask = Task.Factory.StartNew( DoLengthyOperation );
    Session["MyApp_SessionTask"] = longRunningTask;
    return View();
}


public ActionResult About()
{
    // Note that the below Wait method has a bunch of overloads you can use
    // i.e. only wait up until a fixed timeout, wait until a separate cancellation
    // token is signaled, etc.
    var longRunningTask = (Task) Session["MyApp_SessionTask"];
    if ( longRunningTask != null )
        longRunningTask.Wait();
    return View();
}

Обратите внимание: если вы не используете состояние сеанса, это не сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...