Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在完成异步任务之前等待24小时?_C#_Asp.net Mvc_Delay - Fatal编程技术网

C# 如何在完成异步任务之前等待24小时?

C# 如何在完成异步任务之前等待24小时?,c#,asp.net-mvc,delay,C#,Asp.net Mvc,Delay,我正在用.NET Framework制作一个MVC应用程序,在我的一个控制器中,我调用了一个异步任务,该任务向登录用户发送电子邮件 当用户单击某个特定复选框时,将调用此任务,并且电子邮件将用作某种提醒 整个任务按预期工作。选中复选框时,用户会收到一封电子邮件,但我需要它在实际发送电子邮件之前等待24小时,因为它是一个提醒 当前电子邮件是立即发送的,如何在代码继续的同时延迟电子邮件任务的完成?让任务等待24小时再发送邮件 await Task.delay(TimeSpan.FromHou

我正在用.NET Framework制作一个MVC应用程序,在我的一个控制器中,我调用了一个异步任务,该任务向登录用户发送电子邮件

当用户单击某个特定复选框时,将调用此任务,并且电子邮件将用作某种提醒

整个任务按预期工作。选中复选框时,用户会收到一封电子邮件,但我需要它在实际发送电子邮件之前等待24小时,因为它是一个提醒


当前电子邮件是立即发送的,如何在代码继续的同时延迟电子邮件任务的完成?

让任务等待24小时再发送邮件

     await Task.delay(TimeSpan.FromHours(24));

在发送电子邮件之前,在异步函数b中添加此行

让任务在发送邮件之前等待24小时

     await Task.delay(TimeSpan.FromHours(24));
在异步函数b中添加这一行,以便在发送电子邮件之前使用类似的库,该库允许您安排后台作业并使用持久存储对其进行备份

然后,您可以轻松安排一项作业,如:

BackgroundJob.Schedule(
    () => SendEmail("user@domain"),
    TimeSpan.FromDays(1));
使用类似这样的库,可以安排后台作业并使用持久存储对其进行备份

然后,您可以轻松安排一项作业,如:

BackgroundJob.Schedule(
    () => SendEmail("user@domain"),
    TimeSpan.FromDays(1));
这是一部经典作品。虽然可能会让您的系统等待24小时,但您正在创建一个非常脆弱的系统,该系统可能会受到应用程序池重置和服务器重新启动的影响

撇开意外重新启动的可能性不谈,当您的维护周期到来并且计划重新启动时会发生什么情况?有多少排队的电子邮件提醒您无法处理

对于不立即使用数据的系统来说,最好的方法是通过某种形式的存储方案对数据进行缓冲。它可以像将排队的电子邮件写入系统上的文件一样简单,也可以像带有专用电子邮件发送服务的数据库这样更健壮的东西

多年来,我使用了很多电子邮件发送系统,甚至对于即时发送,我们也使用了数据库中介,一个专用的电子邮件发送Windows服务来生成和发送实际的电子邮件。通过集中电子邮件制作,您不仅可以在一个地方维护电子邮件发送代码,还可以提高整个系统的耐用性

如果您的数据库是高可用性集群的一部分,那么您将获得额外的积分,因为在这种系统中,数据库将成为关键点。如果是这样的话,您就可以避免任何形式的停机,而不是整个网络停机。

这是一个经典的例子。虽然可能会让您的系统等待24小时,但您正在创建一个非常脆弱的系统,该系统可能会受到应用程序池重置和服务器重新启动的影响

撇开意外重新启动的可能性不谈,当您的维护周期到来并且计划重新启动时会发生什么情况?有多少排队的电子邮件提醒您无法处理

对于不立即使用数据的系统来说,最好的方法是通过某种形式的存储方案对数据进行缓冲。它可以像将排队的电子邮件写入系统上的文件一样简单,也可以像带有专用电子邮件发送服务的数据库这样更健壮的东西

多年来,我使用了很多电子邮件发送系统,甚至对于即时发送,我们也使用了数据库中介,一个专用的电子邮件发送Windows服务来生成和发送实际的电子邮件。通过集中电子邮件制作,您不仅可以在一个地方维护电子邮件发送代码,还可以提高整个系统的耐用性


如果您的数据库是高可用性集群的一部分,那么您将获得额外的积分,因为在这种系统中,数据库将成为关键点。如果是这样的话,您就可以避免任何形式的停机,而不是网络全面中断。

请重新确认!您可以存储电子邮件,然后每隔几分钟运行一个单独的作业,以检查要发送的电子邮件。不要开始24小时的等待,然后发送电子邮件。假设您有500个服务器排队,并且服务器因为Windows而重新启动。正如@phuzi提到的,你应该把它放在某种形式的存储中,比如数据库中的一个表,或者磁盘上的一个文件,然后定期检查队列是否包含要发送的内容。如果您将其保留在内存中,并且您的实例会回收部署、高内存使用率和较长的生命周期,您将丢失该电子邮件。应用程序和邮件任务不会每天使用,可能每周使用一到两次。我想队列中最多有两封电子邮件。那么简单的延迟是可能的吗?或者你还会把电子邮件储存起来吗?干杯!您可以存储电子邮件,然后每隔几分钟运行一个单独的作业,以检查要发送的电子邮件。不要开始24小时的等待,然后发送电子邮件。假设您有500个服务器排队,并且服务器因为Windows而重新启动。它们都会丢失。正如@phuzi提到的,你应该把它们放在某种形式的存储中,比如
然后定期检查队列中是否包含要发送的内容。如果您将其保留在内存中,并且您的实例会回收部署、高内存使用率和较长的生命周期,您将丢失该电子邮件。应用程序和邮件任务不会每天使用,可能每周使用一到两次。我想队列中最多有两封电子邮件。那么简单的延迟是可能的吗?或者您仍然会存储电子邮件吗?或者,Task.DelayTimeSpan.FromDays1或Task.DelayTimeSpan.FromHours24可以实际使用,使用Task.Delay在这种情况下很脆弱。假设您的应用程序崩溃或死亡,您的所有提醒都将丢失。@hal+1如果他在IIS中运行,请求的最大超时时间将无法设置为足够高以使其成功。更不用说应用程序池重置。或者,Task.DelayTimeSpan.FromDays1或Task.DelayTimeSpan.FromHours24可以使用Task.Delay在这种情况下很脆弱。假设您的应用程序崩溃或死亡,您的所有提醒都将丢失。@hal+1如果他在IIS中运行,请求的最大超时时间将无法设置为足够高以使其成功。更不用说应用程序池重置了。