首页 > 解决方案 > 有没有一种方法可以多次运行一个方法,每次运行前增加时间?

问题描述

到目前为止我有这个代码:

 System.Threading.Thread.Sleep(2000);
(p.CommonWord,
 p.JishoJlpt,
 p.JishoWanikani,
 p.JishoExists,
 p.English,
 p.Furigana,
 p.JmdictId,
 p.JmdictHiragana,
 p.Kanji) = GetAll(block, 1);
 if (p.Kanji == "kanj Id not found")
                        {
                            System.Threading.Thread.Sleep(5000);
                            (p.CommonWord,
                             p.JishoJlpt,
                             p.JishoWanikani,
                             p.JishoExists,
                             p.English,
                             p.Furigana,
                             p.JmdictId,
                             p.JmdictHiragana,
                             p.Kanji) = GetAll(block, 2);
                        }
if (p.Kanji == "kanj Id not found")
                        {
                            System.Threading.Thread.Sleep(10000);
                            (p.CommonWord,
                             p.JishoJlpt,
                             p.JishoWanikani,
                             p.JishoExists,
                             p.English,
                             p.Furigana,
                             p.JmdictId,
                             p.JmdictHiragana,
                             p.Kanji) = GetAll(block, 3);
                        }
if (p.Kanji == "kanj Id not found")
                        {
                            System.Threading.Thread.Sleep(20000);
                            (p.CommonWord,
                             p.JishoJlpt,
                             p.JishoWanikani,
                             p.JishoExists,
                             p.English,
                             p.Furigana,
                             p.JmdictId,
                             p.JmdictHiragana,
                             p.Kanji) = GetAll(block, 4);
                        }
if (p.Kanji == "kanj Id not found")
                        {
                            System.Threading.Thread.Sleep(30000);
                            (p.CommonWord,
                             p.JishoJlpt,
                             p.JishoWanikani,
                             p.JishoExists,
                             p.English,
                             p.Furigana,
                             p.JmdictId,
                             p.JmdictHiragana,
                             p.Kanji) = GetAll(block, 5);
                        }
if (p.Kanji == "kanj Id not found")
                        {
                            System.Threading.Thread.Sleep(60000);
                            (p.CommonWord,
                             p.JishoJlpt,
                             p.JishoWanikani,
                             p.JishoExists,
                             p.English,
                             p.Furigana,
                             p.JmdictId,
                             p.JmdictHiragana,
                             p.Kanji) = GetAll(block, 6);
                        }
if (p.Kanji == "kanj Id not found")
                        {
                            System.Threading.Thread.Sleep(1200000);
                            (p.CommonWord,
                             p.JishoJlpt,
                             p.JishoWanikani,
                             p.JishoExists,
                             p.English,
                             p.Furigana,
                             p.JmdictId,
                             p.JmdictHiragana,
                             p.Kanji) = GetAll(block, 7);
                        }

任何人都可以建议我如何简化这个并且仍然增加每次运行之间的时间。我想要的是从 5 秒延迟开始,每次 7 次迭代加倍,然后结束,即使在这 7 次尝试之后 p.Kanji 是“找不到 kanj Id”。

标签: c#

解决方案


// start with 5 seconds
int sleepTime = 5000;
for (int i = 0; i < 7; i++)
{
  // do sleep
  System.Threading.Thread.Sleep(sleepTime);
  // double sleep time
  sleepTime *= 2;
  // execute
  (p.CommonWord,
   p.JishoJlpt,
   p.JishoWanikani,
   p.JishoExists,
   p.English,
   p.Furigana,
   p.JmdictId,
   p.JmdictHiragana,
   p.Kanji) = GetAll(block, i+1);
  // exit if necessary
  if (p.Kanji != "kanj Id not found")
    break;
}

推荐阅读