C# 异步控制器

C# 异步控制器,c#,asp.net-mvc-4,asp.net-mvc-5,C#,Asp.net Mvc 4,Asp.net Mvc 5,我有两个网页。在一个页面中,我上传了一些文件,并处理了需要花费大量时间才能完成的数据。而在另一个页面上,我只是在数据库中呈现数据。 我已经在c#mvc中实现了这个应用程序。 我的要求是,一旦用户上传文件,文件处理在后台开始,用户将能够浏览其他页面 我们可以通过异步控制器来实现这一点。您是说处理数据需要很多时间。使用异步控制器,您将释放web服务器以服务其他请求,但是请求将在同步调用时完成。(来源:) 如果不希望用户等待,请将作业队列添加到堆栈中,告诉用户您已接受并正在处理该文件,并在操作完成时通

我有两个网页。在一个页面中,我上传了一些文件,并处理了需要花费大量时间才能完成的数据。而在另一个页面上,我只是在数据库中呈现数据。 我已经在c#mvc中实现了这个应用程序。 我的要求是,一旦用户上传文件,文件处理在后台开始,用户将能够浏览其他页面


我们可以通过异步控制器来实现这一点。

您是说处理数据需要很多时间。使用异步控制器,您将释放web服务器以服务其他请求,但是请求将在同步调用时完成。(来源:)

如果不希望用户等待,请将作业队列添加到堆栈中,告诉用户您已接受并正在处理该文件,并在操作完成时通知用户


在.NET中有许多作业队列实现,具体建议取决于您是在“完整的.NET”还是.NET内核上运行。

使用异步控制器并不能满足您的需要,尽管您仍应将其作为第一步来使用。异步控制器只会释放服务器线程,以便处理更多的请求,而没有异步,任何长时间运行的操作都会阻止它们正在使用的线程,并停止处理其他请求。如果有足够长时间运行的线程,那么其他客户端请求将被拒绝

您还需要(或者相反地)研究一种不同的机制来处理该文件,例如,API操作可以将该文件放在一个文件夹中,而另一个(非web服务)进程可以监视该文件夹并拾取要处理的新文件。或者,您可以查看队列或消息总线技术,这增加了复杂性,但也为队列处理提供了安全性


另一个要考虑的问题是如何将验证问题或错误报告回上传客户端,您可以在API动作中进行一些检查,但是您可能仍然需要考虑在文件处理过程中发生错误时如何通知客户端。如何最好地做到这一点取决于您的系统。

在通过异步控制器实现处理请求的同时,用户是否能够浏览其他页面?我对此表示怀疑。根据我的理解,若用户将导航到其他页面,那个么它将点击其他控制器的另一个操作方法,所以处理将从异步控制器停止。正确。您想要做的事情不能用异步控制器来完成。某种类型的作业队列是一种选择,或者Matt在上面写的关于让另一个服务检查文件夹/数据库的内容和进程,这实际上是一种作业队列。是的,我可以使用另一个非web服务来进一步处理。但如果可能的话,我正在寻找其他的选择。请让我知道,如果您可以建议任何其他实施在同一网络项目的点网mvc。另外,要回答您的问题,我将如何通知用户错误是我正在向用户发送邮件,以防出现错误和成功