私はC#でASP.NET MVC3に取り組んでいます。forループの各反復の間に遅延を追加したい。
for(int i=0; i<5; i++)
{
//some code
//add delay here
}
どうすればこれを行うことができますか?
私はC#でASP.NET MVC3に取り組んでいます。forループの各反復の間に遅延を追加したい。
for(int i=0; i<5; i++)
{
//some code
//add delay here
}
どうすればこれを行うことができますか?
他の回答が言っているように、を使用Thread.Sleep
するとスレッドがスリープ状態になります...しかし、あなたがウェブアプリを書いていることを考えると、あなたが望むことをするとは思いません。
ユーザーが一度に 1 秒ずつ起こっていることを確認できるようにすることが目的の場合は、クライアント側に遅延を設定する必要があります。HTTP 応答を送信する前に 1 秒の遅延が 5 回ある場合、ユーザーは結果ページが表示されるまで 5 秒待たなければならないことを意味します。
AJAXでこれを行う必要があるようです。
編集: コメントに記載されているように、おそらくwindow.setTimeout
Javascript 呼び出しを確認する価値があります。(私は Javascript を「実行」していないので、その詳細についてはお答えできません。)
最も簡単な方法は、現在のスレッドをスリープ状態にすることです。
System.Threading.Thread.Sleep (200);
ただし、Web アプリケーションのスレッドは非常に貴重なリソースであり、1 つをスリープ状態にしてもスレッドはビジーなままであることを忘れないでください。
通常、Web アプリケーションでこれを行う正当な理由はありません。
これを行う必要がある問題は、より良い方法で解決できます。
すでに説明したものとは別のアプローチがReactive Extensions (Rx)である可能性があります。そこには、時間内に値のシーケンスを生成するメソッドがいくつかあります。あなたの場合、次のコードを使用できます。
var values = Observable.Generate(
0, // Initializer.
i => i < 5, // Condition.
i => i + 1, // Iteration.
i => i, // Result selector.
i => TimeSpan.FromSeconds(1));
var task = values
.Do(i => { /* Perform action every second. */ })
.ToTask();
values.Wait();
このToTask
呼び出しにより、 が完了するのを待つことができますIObservable
。これが必要ない場合は、そのままにしておくことができます。Observable.Generate
特定のタイムスタンプで一連の値を生成します。
あなたが使用することができますThread.Sleep();
int milliseconds = 5000;
Thread.Sleep(milliseconds);
これにより、現在のスレッドの実行が 5 秒間停止します。