スレッド。スリープ「ブレイク」タスク
-
26-10-2019 - |
質問
だから私は次のコードを持っています
Action d = () =>
{
for (int i = 0; i <= 10; i++)
{
Thread.Sleep(50);
Console.WriteLine("Task: {0} log:{1}",Thread.CurrentThread.ManagedThreadId,i);
}
};
Task.Factory.StartNew(d);
しかし、それは何も出力しません。しかし、スレッドをコメントすると、期待どおりに機能します。異なる睡眠値で遊ぶことで、値に応じて多かれ少なかれ結果が得られます。
なぜそれがこのように起こるのですか?
解決
タスクが実行される前に、あなたのプログラムが終了していると思います。
タスクはデフォルトでスレッドプールスレッドで実行されます。これはバックグラウンドスレッドです。つまり、あなたのプログラムは、彼らが終了する前に彼らが終了するのを待たないことを意味します。
メインスレッドにこれを追加してみてください:
var task = Task.Factory.StartNew( d );
task.Wait();
他のヒント
タスクがどこでも終了するのを待っていますか、それともタスクが完了する前にプログラムを終了しますか?
Task task = Task.Factory.StartNew(d);
task.Wait();
私はあなたのコードを実行したばかりで、それは出力されます:
Task: 10 log:0
Task: 10 log:1
Task: 10 log:2
Task: 10 log:3
Task: 10 log:4
Task: 10 log:5
Task: 10 log:6
Task: 10 log:7
Task: 10 log:8
Task: 10 log:9
Task: 10 log:10
これが私が実行したコードアプリに基づいたコンソールのコードです。
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Action d = () =>
{
for (int i = 0; i <= 10; i++)
{
Thread.Sleep(50);
Console.WriteLine("Task: {0} log:{1}", Thread.CurrentThread.ManagedThreadId, i);
}
};
Task.Factory.StartNew(d);
Console.ReadLine();
}
}
}
所属していません StackOverflow