2014-11-14 33 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