3

C#メインスレッドを停止せずに2つの関数呼び出しの間で一時停止する方法

Foo();
Foo(); // i want this to run after 2 min without stopping main thread


Function Foo()
{
}

ありがとう

4

6 に答える 6

2
    Task.Factory.StartNew(Foo)
                .ContinueWith(t => Task.Delay(TimeSpan.FromMinutes(2)))
                .ContinueWith(t => Foo());

スレッドプールで眠らないでください。一度もない

「スレッドプールには限られた数のスレッドしかありません。スレッドプールは、多数の短いタスクを効率的に実行するように設計されています。スレッドがプールに戻って使用できるように、各タスクが迅速に終了することに依存しています。次の任務。」詳細はこちら

なぜDelayですか?DelayPromiseで内部的に使用Timerし、効率的で、より効率的です

于 2013-04-18T15:33:10.077 に答える
2

試す:

Task.Factory.StartNew(() => { foo(); })
    .ContinueWith(t => Thread.Sleep(2 * 60 * 1000))
    .ContinueWith(t => { Foo() });
于 2013-04-18T15:16:44.563 に答える
1

を使用するのはどうですかTimer:

var timer = new Timer();
timer.Interval = 120000;
timer.Tick += (s, e) =>
{
    Foo();
    timer.Stop();
}
timer.Start();
于 2013-04-18T15:16:22.277 に答える
1

次のように、新しいスレッドを作成してみてください。

new Thread(() => 
    {
         Foo();
         Thread.Sleep(2 * 60 * 1000);
         Foo();
    }).Start();
于 2013-04-18T15:16:42.573 に答える
0
var testtask = Task.Factory.StartNew(async () =>
    {
        Foo();
        await Task.Delay(new TimeSpan(0,0,20));
        Foo();
    });
于 2013-04-18T15:27:30.933 に答える
0

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();
    }
}

コードはテストされていません。

于 2013-04-18T15:20:57.493 に答える