use*_*833 12 c# parallel-processing asp.net-mvc task
我正在使用asp.net mvc,我想在他到达网站的主页时从数据库中缓存一些关于用户的数据.因此,当用户请求主页时,我想调用异步方法,该方法进行数据库调用和缓存数据.
这样做的任何例子都会很棒.
Oli*_*old 21
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
Task.Run(()=> DoSomeAsyncStuff());
return View();
}
private async void DoSomeAsyncStuff()
{
}
}
Run Code Online (Sandbox Code Playgroud)
Ron*_*ael 18
对于.NET Core,我使用这个
_ = Task.Run(() => SomeAsyncFunction());
Run Code Online (Sandbox Code Playgroud)
Ale*_*lex 13
获得最高票数的答案都建议使用Task.Run,这对于 ASP.NET Core 来说是一个非常糟糕的做法,因为它可能会导致线程匮乏(因为Task.Run安排任务在线程池上运行,并且需要线程池线程来处理 http 请求)。
如果您确实想要“即发即忘”(a)真正异步并且(b)该方法处理其中的所有异常的方法,那么只需执行以下操作:
_ = DoSomething();
Run Code Online (Sandbox Code Playgroud)
假设该方法是
public async Task DoSomething()
{
}
Run Code Online (Sandbox Code Playgroud)
ThreadPool.QueueUserWorkItem((Action<object>)state =>
{
//do your async work
}, null);
Run Code Online (Sandbox Code Playgroud)
或者Task.StartNew(...)
(抱歉,我的回答很简短,这可能会带您走上正确的道路,或者有人可以编辑它以显示完整的示例,好吗?)