İkinci yöntem, Task.Run
.NET çerçevesinin (.NET 4.5'te) sonraki bir sürümünde tanıtıldı.
Bununla birlikte, ilk yöntem, Task.Factory.StartNew
oluşturmak istemediğiniz iş parçacığı hakkında birçok yararlı şey tanımlama fırsatı verirken Task.Run
, bunu sağlamaz.
Örneğin, uzun süren bir görev dizisi oluşturmak istediğinizi varsayalım. İş parçacığı havuzunun bir iş parçacığı bu görev için kullanılacaksa, bu iş parçacığı havuzunun kötüye kullanılması olarak kabul edilebilir.
Bundan kaçınmak için yapabileceğiniz bir şey, görevi ayrı bir iş parçacığında çalıştırmak olacaktır. Bu göreve adanmış ve göreviniz tamamlandıktan sonra yok edilecek yeni oluşturulmuş bir iş parçacığı . Sen olamaz ile bunu başarmak Task.Run
sen bunu yapabilirsiniz ederken, Task.Factory.StartNew
aşağıda gibi:
Task.Factory.StartNew(..., TaskCreationOptions.LongRunning);
Belirtildiği gibi burada :
Bu nedenle, .NET Framework 4.5 Geliştirici Önizlemesi'nde yeni Task.Run yöntemini tanıttık. Bu, hiçbir şekilde Task.Factory.StartNew'i geçersiz kılmaz,
ancak bir grup parametreyi belirtmeye gerek kalmadan
Task.Factory.StartNew'i kullanmanın hızlı bir yolu olarak düşünülmelidir . Bu bir kısayol. Aslında, Task.Run aslında Task.Factory.StartNew için kullanılan aynı mantık açısından uygulanır, sadece bazı varsayılan parametreleri geçirir. Bir Eylemi Görev'e ilettiğinizde:
Task.Run(someAction);
tam olarak şuna eşittir:
Task.Factory.StartNew(someAction,
CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
StartNew
varsayılanTaskScheduler.Current
olarak iş parçacığı havuzu olabilir ama aynı zamanda UI iş parçacığı olabilir kullanımları.