ASP.NET - 启动后台任务而不返回任何结果并阻止用户

ASP.NET - start a background task without returning any results and blocking the user

我正在做一个项目,当用户注册完成后,有一些大文件必须复制到其他位置,有时复制所有内容需要大约 10 分钟。

我不需要通知用户,也不需要显示任何进度,我只想向用户显示他们已成功注册并调用我的网络服务上的方法启动一个新的后台任务来完成所有耗时的任务。

任何建议都会有所帮助!谢谢

编辑:

感谢您推荐 JavaScript 方法,但我不想使用 JavaScript,因为用户可以在浏览器上关闭其 JavaScript。

我已经试过了

 await System.Threading.Tasks.Task.Run(() => copyFiles());

但问题是,当我将视图返回给用户时,有时服务器会提前终止线程,有时它永远不会完成它的任务(我不明白为什么)

那么尝试在异步模式下使用 "jQuery.ajax" 方法。 供大家参考... http://api.jquery.com/jquery.ajax/

您可以使用 jQuery 异步调用 C# 函数。在这些 C# 函数中,您可以执行后台工作。您甚至可以将这些函数放在 asmx 文件中并使它们成为 [WebMethod]。请参阅使用 jQuery AJAX http://www.yogihosting.com/blog/calling-a-c-function-with-jquery-ajax/

调用 C# 函数

a new method in .NET 4.5.2,它允许您在 ASP.NET.

中进行长时间的 运行 后台处理

ASP.NET中有一些与后台任务相关的第三方库。看看 Scott Hanselman 的 this 文章。它可能对你有帮助。

用任务包装您的代码,使其在不同的线程中运行。

// 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
}