我在服务器端做了一些处理。
当用户选择大量数据进行处理时(比方说,它们是插入,更新,删除数据库和文件读/写东西),需要花费很多时间。
我正在使用带有.net核心mvc web应用程序的c#。
在这种情况下,是否可以确定何时进程需要超过某个确定的时间,将其运行到后台(或者如果可能的话,将其转移到另一个工具)并通知用户需要一些时间并且您将收到通知一旦完成(通知不必是实时的。我们可以邮寄)
那么有没有机制呢?
答案 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检查处理状态,并执行池策略,而不是通过电子邮件通知用户,这样用户甚至不会注意到处理正在进行在后台完成。
希望你成功
最好的问候