31 Temmuz 2017 Pazartesi

Task.Factory Sınıfı

Giriş
Şu satırı dahil ederiz.
using System.Threading.Tasks;
FromAsync
Aslında tam olarak task başlatıyor diyemem. Çünkü verilen iş IO Completion Port'a devredilir. Örneğin UdpClient sınıfının SendAsync metodu şöyledir.
public Task<int> SendAsync(byte[] datagram, int bytes)
{
    return Task<int>.Factory.FromAsync(BeginSend, EndSend, datagram, bytes, null);
}
StartNew
Açıklaması şöyle
A Task.Run or Task.Factory.StartNew may start executing at any time (e.g. if a thread from the pool is idle), even if nothing is waiting for it.
Kullanımı çok basit. Ancak bu yöntemin tercih edilmemesi gerektiği belirtiliyor. .Net 4.5 ile Task.Run kullanılmalıymış. Gerekçesini tam anlamadım. Sanırım sürekli yeni thread yaratmaya zorlaması.
Task.Factory.StartNew(() => {...});
StartNew() içine verilen metod bir sonuç dönebilir, Task  dönmemelidir. Yani metodun imzası kabaca şöyle.
public Task<TResult> StartNew(Func<TResult> function,...)
Bu metod async'leri anlamıyor. Yani aşağıdaki metod işe yaramaz.
Task newTask = Task.Factory.StartNew(MainTask);

async Task MainTask()
{...}
StartNew + CancellationToken
Şöyle yaparız.
Task SomeMethodAsync(CancellationToken token)
{
  return Task.Factory.StartNew(() => 
  {
    // Do something...
  }, token);
}




Hiç yorum yok:

Yorum Gönder