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について読んだことがあります。停止や一時停止の経験がないのではないかと思います。将来問題を考えたくない。では、この種のコードに最適な方法を教えていただけますか?

また、timer / 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

Thread.Sleep(miliseconds)希望する時間実行を停止するために使用します。

于 2012-09-12T09:31:41.877 に答える
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 に答える