2014-11-14 46 views
1

我使用MVC3及ASP.NET 4.5異步與MVC3和ASP.NET4.5

據我瞭解,儘管我使用ASP.NET 4.5,我不能使用新的MS「等待」, 「任務」異步功能。我對麼?我是否仍然需要使用舊的「AsyncController」方法。

最後,我試圖做的是「異步」一個私有方法,而不是完整的Action,就像「SendMail」方法調用會發生什麼。

即。

public ActionResult Index() 
    { 

    SendMail(); // Inbuilt Async 

    //Copy Document in DB. This is coded by private method in class, but needs to be fired asynchronously 
    CopyDocument(); 

    ViewBag.Message = "Getting documents, Check back soon"; 


    return View(); 
    } 

那麼我怎麼能異步只是「CopyDocument()」。

非常感謝提前。

回答

2

MVC3不識別Tasks

你可以從MVC4中獲得它。

更新: 雖然MVC3框架不完全支持Taskasyncawait直接作爲你看到@ VsevolodGoloviznin的答案,你可以使用Task.Factory庫。

在這種情況下,建議是使用Task.Run看到Stephen's blog on startnew-is-dangerousthis blog更多細節

使用下面

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

而不是

Task.Factory.StartNew(() => CopyDocument()); 
+0

謝謝你。這對我來說是非常新的。 – SamJolly 2014-11-14 23:22:37

+0

所有新東西都很有趣!和我們所有的學習者:) – 2014-11-15 00:20:37

0

你仍然可以使用任務並行庫

Task.Factory.StartNew(() => CopyDocument()); 
+0

有趣。我不需要在瀏覽器中獲取結果。複製的文件將從單獨的文件頁面中檢索。該流程只需啓動並在自己的時間內完成,並將控制權重新轉移回來,就像Async Mail調用會發生什麼情況一樣。以上是否實現了這個目標? – SamJolly 2014-11-14 17:59:06

+0

是的,我相信這是機票......一個真正的發現......謝謝。 – SamJolly 2014-11-14 18:07:31

+0

我認爲你值得一提,因爲你是第一個提到這個圖書館的人。我確實給你一個,但有人可能已經低估了你。不幸的是,我不能獎勵另一點。我最終使用Task.Run(),閱讀了博客,因此獲得了答案獎。所以我只能說非常感謝你指點這麼快到Task.Factory – SamJolly 2014-11-15 00:03:05