C#メインスレッドを停止せずに2つの関数呼び出しの間で一時停止する方法
Foo();
Foo(); // i want this to run after 2 min without stopping main thread
Function Foo()
{
}
ありがとう
C#メインスレッドを停止せずに2つの関数呼び出しの間で一時停止する方法
Foo();
Foo(); // i want this to run after 2 min without stopping main thread
Function Foo()
{
}
ありがとう
Task.Factory.StartNew(Foo)
.ContinueWith(t => Task.Delay(TimeSpan.FromMinutes(2)))
.ContinueWith(t => Foo());
スレッドプールで眠らないでください。一度もない
「スレッドプールには限られた数のスレッドしかありません。スレッドプールは、多数の短いタスクを効率的に実行するように設計されています。スレッドがプールに戻って使用できるように、各タスクが迅速に終了することに依存しています。次の任務。」詳細はこちら
なぜDelay
ですか?DelayPromise
で内部的に使用Timer
し、効率的で、より効率的です
試す:
Task.Factory.StartNew(() => { foo(); })
.ContinueWith(t => Thread.Sleep(2 * 60 * 1000))
.ContinueWith(t => { Foo() });
を使用するのはどうですかTimer
:
var timer = new Timer();
timer.Interval = 120000;
timer.Tick += (s, e) =>
{
Foo();
timer.Stop();
}
timer.Start();
次のように、新しいスレッドを作成してみてください。
new Thread(() =>
{
Foo();
Thread.Sleep(2 * 60 * 1000);
Foo();
}).Start();
var testtask = Task.Factory.StartNew(async () =>
{
Foo();
await Task.Delay(new TimeSpan(0,0,20));
Foo();
});
Timer Classを使用できます。
using System;
using System.Timers;
public class Timer1
{
private static System.Timers.Timer aTimer;
public void Foo()
{
}
public static void Main()
{
Foo();
// Create a timer with a two minutes interval.
aTimer = new System.Timers.Timer(120000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += new ElapsedEventHandler(Foo());
aTimer.Enabled = true;
}
// Specify what you want to happen when the Elapsed event is
// raised.
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
Foo();
}
}
コードはテストされていません。