これは、10個のスレッドをバッチで開始し、5秒間待機して、バッチで停止するコンソールプログラムです。
static void Main(string[] args)
{
System.Threading.Tasks.Parallel.For(0, 10, (index) =>
{
Action<int> act = (i) =>
{
Console.Write("start {0} ", i);
Thread.Sleep(5000);
};
act.BeginInvoke(index, OnTaskComplete, index);
});
Console.ReadKey();
}
static void OnTaskComplete(IAsyncResult res)
{
Console.Write("finish {0} ", res.AsyncState);
}
しかし、結果は私が期待したものではありません。10個のスレッドが1つずつゆっくりと開始し(約1秒間隔)、「開始」の前に「終了」が出てきます。
Thread.Sleepをコメントアウトすると、すべてのスレッドがフラッシュで開始および終了します。
Thread.Sleep
他のスレッドに影響しますか?とにかく純粋なアイドル時間を作る方法はありますか?
/ - - - - - - - - - - - - - - -編集 - - - - - - - - - - ----------
同じ問題は次の場合にも発生します。
static void Main(string[] args)
{
System.Threading.Tasks.Parallel.For(0, 10, (index) =>
{
Console.Write("start {0} ", index);
Thread.Sleep(5000);
Console.Write("fnish {0} ", index);
});
Console.ReadKey();
}
- - - - - - - - - - - 編集 - - - - - - - - - - - -
ついに私はthread.sleepを置き換える素敵な方法を見つけました
static void Main(string[] args)
{
System.Threading.Tasks.Parallel.For(0, 10, (index) =>
{
Console.Write("start {0} ", index);
var t1 = new System.Threading.Timer(new TimerCallback(MyTimerCallback), index, 5000, 0);
});
Console.ReadKey();
}
static void MyTimerCallback(object o)
{
Console.Write("Timer callbacked ");
}