4

我试图找出执行以下操作的最佳方法是什么?我有一个与 httpwebrequest 一起使用的控制台应用程序。在我的应用程序的某些部分,我想这样做:

  agent.GetURL("http://site.com/etc.../"); 
Wait for 8-16 Seconds<-Should be random  
 Agent.GetURL("http://site.com/etc.../");
Wait for 4-6 Seconds etc...

请求是时间敏感的,所以计算机时间应该与每个请求不同我不能只是请求等待它完成并再次请求。我已经阅读了有关计时器 thread.sleep 的信息。恐怕我没有停止或暂停的经验 不想在未来提出问题。那么,如果你能告诉我这种代码的最佳方法是什么?

计时器/thread.sleep 是否有可能在函数内部并在我需要时使用它?

谢谢!

编辑:这个程序是不可见的,所以我需要一个不加载圆形鼠标的解决方案:)

4

3 回答 3

6

尝试

Random random = new Random();
int timeDelay = random.Next(8, 16);

Thread.Sleep(timeDelay * 1000); //time in milliseconds
于 2012-09-12T09:31:21.537 回答
4

这个问题提供了一种在定义范围内生成随机数的方法,您可以按原样将其包装在另一种方法中以暂停随机数秒。

代码可能如下所示:

// Method from the linked answer, copy-pasted here for completeness
// added the relevant fields because the original code is an override
public Int32 GetNewRandomNumber(Int32 minValue, Int32 maxValue)
{
    RNGCryptoServiceProvider _rng = new RNGCryptoServiceProvider();
    byte[] _uInt32Buffer = new byte[4];

    if (minValue > maxValue) 
        throw new ArgumentOutOfRangeException("minValue");
    if (minValue == maxValue) return minValue;
    Int64 diff = maxValue - minValue;
    while (true)
    {
        _rng.GetBytes(_uint32Buffer);
        UInt32 rand = BitConverter.ToUInt32(_uint32Buffer, 0);

        Int64 max = (1 + (Int64)UInt32.MaxValue);
        Int64 remainder = max % diff;
        if (rand < max - remainder)
        {
            return (Int32)(minValue + (rand % diff));
        }
    }
}

public void RandomWait(int minWait, int maxWait)
{
    // Thread.Sleep() wants a number of milliseconds to wait
    // We're going, as an example, to wait between 8 and 16 seconds
    System.Threading.Thread.Sleep(GetNewRandomNumber(8, 16) * 1000);
}

然后,您只需RandomWait()在需要时拨打电话即可。

于 2012-09-12T09:42:51.593 回答
4

用于Thread.Sleep(miliseconds)在所需时间停止执行。

于 2012-09-12T09:31:41.877 回答