2012-02-24 90 views
0

這裏是我的代碼線程同步

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)開始在家庭行動漫長的過程,因爲這樣沒有一點等待
這個過程不返回任何 2)在我的「關於」操作中,我想檢查進程是否開始「主頁」操作已完成或沒有完成,如果沒有,則等待直至完成。
我已經嘗試過靜態實例,但這不會對同時請求有幫助,
我也嘗試過全局變量,但沒有幫助,因爲每個請求都獲得控制器的新副本。
我的最終目標是當用戶在查看索引頁時,我的漫長過程應該在後臺完成,我的過程需要20秒。
任何幫助,將不勝感激,
感謝

回答

0

使用任務,並將其存儲在您的會話狀態字典。

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(); 
} 

請注意,如果您在進程會話狀態不使用,這將無法正常工作。

+0

謝謝@泰森,任務是每屆會議..什麼將範圍longRunningTask變量? – Nnp 2012-02-24 00:31:29

+0

然後將其存儲在會話狀態。見上面的編輯。 – Tyson 2012-02-24 00:41:20

+0

謝謝@tyson。我現在在TempData存儲,它的工作原理。 – Nnp 2012-02-24 19:14:14