2017-02-10 52 views
0

我从来没有在我的生命编程的异步方法之前。 我刚刚看了以下网站:https://msdn.microsoft.com/en-us/library/mt674882.aspx返回查看,同时处理数据

但它并不适合我完全清楚......

我想functie在处理数据返回一个视图。没有用户不得不等待数据在视图加载之前进行处理。 所以返回的观点,并保持在后台处理数据....

那么,下面的伪代码可能的异步编程?

public async actionresult page(object obj) 
    { 
     SQLUploadToDatabase(obj); 

     string x = DoOtherWork(); 

     return View(x); 
    } 



Public void SQLUploadToDatabase(object obj) 
{ 
     conn = SQL.openconnection; 
     conn.inserttotable(obj); 
} 
+0

这是不相关的异步/ AWAIT。除非您不关心结果(即如果您的语句失败或iis应用程序池重新启动会发生什么情况),否则它可能不是好的做法。有很多SO q/a关于在asp.net/mvc上卸载长时间运行的进程,我建议你搜索一下。 – Igor

+1

是的,不,那不是异步控制器方法。你将不得不启动一些后台进程来完成上传,并立即向客户端返回一些内容。用不同的方法来运行你的后台进程。让用户知道结果就成了一个问题。许多方式来完成这一点。许多。许多。 – Will

+0

在阅读上面的消息时,我想我已经搜索了单词的错误组合。 我会看看我用“卸载长时间运行的进程”作为搜索关键词时发现。谢谢您的回答。 – DutchFlow

回答

0

看来,你正在寻找火,忘记的方法。如果你不关心后台作业成功或失败,你可以使用 -

public ActionResult Page(object obj) 
{ 
    Task.Run(() => SQLUploadToDatabase(obj)); 

    string x = DoOtherWork(); 

    return View(x); 
} 

如果你想知道它是否是成功或失败,你要使用的背景调度像迟发型或Quartz.NET。你可以在How to run Background Tasks in ASP.NET阅读更多。

+0

谢谢,那就是我一直在寻找的!我已经开发了一种通过检查不同进程中的值来检查状态的方法。所以我不在乎这个代码中的失败或成功。我对你的伪代码看起来很容易感到惊讶。我会尽快尝试。 – DutchFlow

+0

当心,'Task.Run'会拉一个线程从asp.net线程池,所以如果够的这些运行,你可以饿死请求。如果这可能是一个问题,那么使用旧的'Thread'就会有更好的运气。 –