在 do while 循环内部,我想在 c# 中每 1 分钟执行一次特定代码,直到条件满足

Posted

技术标签:

【中文标题】在 do while 循环内部,我想在 c# 中每 1 分钟执行一次特定代码,直到条件满足【英文标题】:Inside do while loop, I want to execute specific code for 3 times till condition satisfy for every 1 min in c# 【发布时间】:2020-02-07 18:30:23 【问题描述】:

我想每 1 分钟执行一次“发布邮件”功能,直到他的标志仅在 c# 中 3 次为真。 基本上,当标志为假时,我想每 1 分钟重试 3 次函数 请给我解决方案

do

    isSuccess = PostMailThroughSMTP
                .postMail(objSmtpClient.SmtpClient, objBuildMail.MailMsg);
    Thread.Sleep(1000);

while (isSuccess != true);

【问题讨论】:

Thread.Sleep 不是安排操作的好方法。您正在开发什么样的应用程序? Windows 窗体?控制台应用程序? @TheodorZoulias 控制台应用 在这种情况下Thread.Sleep 是可以的。 【参考方案1】:

您可以使用递减计数器试试这个:

int count = 3;
do

  isSuccess = PostMailThroughSMTP
              .postMail(objSmtpClient.SmtpClient, objBuildMail.MailMsg);
  Thread.Sleep(1000);

while ( isSuccess != true && --count >= 1 );

【讨论】:

【参考方案2】:

计时器是一种在间隔上执行功能的方法,比如说每分钟。在 Elapsed 事件中,您可以放置​​一个带有 for 循环的方法,该循环在 isSuccess 为 true 时执行 PostMailThroughSMTP 三次或更少。

如果它以多线程方式使用,则不要使用 Thread.Sleep(x) 而是使用 Thread.CurrentThread.Join(x) 因为那不是阻塞。

【讨论】:

【参考方案3】:

您当前的代码已更正

bool isSuccess = false;

// for is more readable than while in the context
for (int attempt = 0; attempt < 3; ++attempt) 
  isSuccess = PostMailThroughSMTP.postMail(objSmtpClient.SmtpClient, objBuildMail.MailMsg); 

  // If we succeeded, we don't have to wait a minute
  if (isSuccess)
    break;

  // Every minute - 60 seconds - 60000 milliseconds
  Thread.Sleep(60000);  


...

if (isSuccess) 
  // eMail has been posted
 
else 
  // eMail has NOT been posted 

【讨论】:

以上是关于在 do while 循环内部,我想在 c# 中每 1 分钟执行一次特定代码,直到条件满足的主要内容,如果未能解决你的问题,请参考以下文章

《C#零基础入门之百识百例》(十六)循环结构do-while语句 -- 这道题会做了吗?

C#视频forwhiledo-while三种循环

Do-While 循环,但 while 语句的值在 Do 语句内

sql server中do while循环怎么写

for,while,do while语句区别以及常见死循环格式

四大循环内部控制原则