Giriş
Açıklaması şöyle
Kullanımı çok basit. Şöyle yaparız. Verilen işin thread pool içinde çalışmasını sağlar.
Bu kullanımı hiç anlamadım. asenkron metodu senkron haline getiriyor ve yapılmamalı deniliyor. Açıklaması şöyle
Şöyle yaparız.
Elimizde şöyle bir metod olsun
Task.Run metoduna döndürülen nesne tipini yazamaya gerek yok. Derleyici bizim için belirler. Şöyle yaparız.
MSDN örneği şöyle
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.Action Parametresi - Lambda
Kullanımı çok basit. Şöyle yaparız. Verilen işin thread pool içinde çalışmasını sağlar.
Task.Run(() => {...});
Task.Run altta şöyle bir kod çalıştırıyor.Task.Factory.StartNew(someAction,
CancellationToken.None,
TaskCreationOptions.DenyChildAttach,
TaskScheduler.Default);
Action Parametresi - async metodBu kullanımı hiç anlamadım. asenkron metodu senkron haline getiriyor ve yapılmamalı deniliyor. Açıklaması şöyle
You should not hide an asynchronous implementation behind a synchronously running methodÖrnek
Şöyle yaparız.
Task.Run(async () => await MyAsyncTask());
ConcurrentBag<int> bag = new ConcurrentBag<int> ();
async Task MyAsyncTask()
{
await Task.Delay(random.Next(1000));
bag.Add (random.Next (10));
}
ÖrnekElimizde şöyle bir metod olsun
public async Task<Foo> GetFooAsync();
Senkron hale getirmek için şöyle yaparızTask.Run(async () => await GetFooAsync());
Döndürülen Nesne TipiTask.Run metoduna döndürülen nesne tipini yazamaya gerek yok. Derleyici bizim için belirler. Şöyle yaparız.
Task<string> Foo()
{
return Task.Run(()=>
{
SomeLongRunningMethod();
return "Hello";
});
}
ExceptionMSDN örneği şöyle
var myTask = Task.Run(() =>
{
throw new Exception("test");
});
try
{
myTask.Wait();
}
catch (Exception e)
{
return false;
}
Run metodu exception fırlatırsa, dışarıdaki kod exception'ı görebilir. Açıklaması şöyle.task.Wait() Rethrows any exceptions
task.Result Rethrows any exceptions
Hiç yorum yok:
Yorum Gönder