决定大型流程并通知用户

时间:2018-03-25 09:22:01

标签: asp.net-core

我在服务器端做了一些处理。

当用户选择大量数据进行处理时(比方说,它们是插入,更新,删除数据库和文件读/写东西),需要花费很多时间。

我正在使用带有.net核心mvc web应用程序的c#。

在这种情况下,是否可以确定何时进程需要超过某个确定的时间,将其运行到后台(或者如果可能的话,将其转移到另一个工具)并通知用户需要一些时间并且您将收到通知一旦完成(通知不必是实时的。我们可以邮寄)

那么有没有机制呢?

2 个答案:

答案 0 :(得分:1)

您可以继续创建处理数据的作业,您可以尝试hangfire,这样您就可以在aspnet核心应用程序中创建后台作业。

答案 1 :(得分:1)

我认为你无法做出你想要的东西。另一方面,您可以使用并行foreach来更快地处理更多数据。

例如:

Parallel.ForEach([list of entities],
                 new ParallelOptions { MaxDegreeOfParallelism = 2 },
                 [entity] =>
                 {
                   //YOURCODE PROCESSING THE ENTITY (INSERT,UPDATE,DELETE)
                 }
);

属性MaxDegreeOfParallelism定义了最多将要使用的线程数。我建议你从2开始逐一增加,看看哪种最适合你。

并行foreach将使用更多线程来处理您的数据。

如果并行foreach无法解决您的问题,您可以使用包含接收用户数据的策略,假设此处理需要很长时间,将此数据按原样存储在您的数据库或任何其他类型的存储,为您的用户提供一个回复,其中包含一个事务ID和一个文本,说明这将花费很长时间,并且响应将通过电子邮件发送。通过这样做,您将需要构建另一个服务来处理这些事务,并使用您认为必要的任何内容向用户发送电子邮件。

另一种可能性是,您可以创建一种方法来根据事务ID检查处理状态,并执行池策略,而不是通过电子邮件通知用户,这样用户甚至不会注意到处理正在进行在后台完成。

希望你成功

最好的问候