Giriş
Şu satırı dahil ederiz.
Açıklaması şöyle
Şöyle yaparız.
Ş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);
}
StartNewAçı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
Task SomeMethodAsync(CancellationToken token)
{
return Task.Factory.StartNew(() =>
{
// Do something...
}, token);
}
Hiç yorum yok:
Yorum Gönder