私は方法があります:Task.Run()とTask.Factory.StartNew(の違いは何ですか)
private static void Method()
{
Console.WriteLine("Method() started");
for (var i = 0; i < 20; i++)
{
Console.WriteLine("Method() Counter = " + i);
Thread.Sleep(500);
}
Console.WriteLine("Method() finished");
}
をそして私は新しいタスクにこの方法を開始します。 私はこの
var task = Task.Factory.StartNew(new Action(Method));
またはこの
var task = Task.Run(new Action(Method));
のような新しいタスクを開始することができます。しかしTask.Run()
とTask.Factory.StartNew()
の間に違いがあります。どちらもThreadPoolを使い、Taskのインスタンスを作成した直後にMethod()を起動します。最初の変種を使うべきときと、2番目の変種を使うべきときは?
実際、StartNewはThreadPoolを使用する必要はありません。私の答えにリンクしているブログを参照してください。問題は 'StartNew'で、デフォルトでは' TaskScheduler.Current'が使用されます。これはスレッドプールでもUIスレッドであってもかまいません。 –
[Task.Start()、Task.Run()およびTask.Factory.StartNew()の使用については複製可能です(https://stackoverflow.com/questions/29693362/regarding-usage-of-task-start) –