1

だから私は次のコードを持っています

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

ただし、何も出力しません。しかし、Thread.Sleep にコメントすると、期待どおりに動作します。さまざまなスリープ値で遊ぶと、値に応じて多かれ少なかれ結果が得られます。

なぜこのようになるのでしょうか?

4

3 に答える 3

3

タスクが実行される前にプログラムが終了していると思われます。

デフォルトでは、タスクはバックグラウンド スレッドであるスレッド プール スレッドで実行されます。つまり、プログラムは終了する前にそれらが終了するのを待ちません。

これをメインスレッドに追加してみてください:

var task = Task.Factory.StartNew( d );
task.Wait();
于 2011-11-30T07:48:42.327 に答える
3

タスクがどこかで終了するのを待っていますか、それともタスクが完了する前にプログラムが終了しますか?

Task task = Task.Factory.StartNew(d);
task.Wait();
于 2011-11-30T07:48:44.743 に答える
0

コードを実行したところ、次のように出力されます。

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();
    }
  }
}
于 2013-03-11T08:59:11.293 に答える