我正在开发一个项目,当用户的注册完成时,有一些大文件必须复制到其他一些位置,有时需要大约10分钟来复制所有内容。
我不需要通知用户并且我不需要显示任何进度,我想要做的就是向用户显示他们已成功注册并在我的Web服务上调用方法以启动执行所有耗时任务的新后台任务。
任何建议都会有所帮助!感谢。
修改
感谢您推荐JavaScript方法,但我不想使用JavaScript,因为用户可以在浏览器上关闭JavaScript。
我已经尝试了
await System.Threading.Tasks.Task.Run(() => copyFiles());
但问题在于,当我将视图返回给用户时,有时服务器会比应该更早地杀死线程,有时它永远不会完成任务(我无法弄清楚原因)
答案 0 :(得分:2)
您可以使用jQuery异步调用C#函数。在这些C#函数中,您可以完成后台工作。您甚至可以将这些函数放在asmx文件中并制作它们[WebMethod]。请参阅使用jQuery AJAX http://www.yogihosting.com/blog/calling-a-c-function-with-jquery-ajax/
调用C#函数答案 1 :(得分:2)
有a new method in .NET 4.5.2,它允许您在ASP.NET中执行长时间运行的后台进程。
答案 2 :(得分:1)
尝试使用" jQuery.ajax"异步模式下的方法。 供您参考...... http://api.jquery.com/jquery.ajax/
答案 3 :(得分:1)
ASP.NET中有一些与后台任务相关的第三方库。请查看Scott Hanselman撰写的this文章。它可能对你有所帮助。
答案 4 :(得分:1)
使用任务包装代码,使其在不同的线程中运行。
// Use this method. Replace 'id' with the set of parameters you might need.
public void CopyFilesAsync(int id)
{
System.Threading.Tasks.Task.Run(() => CopyFiles(id));
}
private void CopyFiles(int id)
{
// your copy files code here
}