26 Kasım 2020 Perşembe

Task.WhenAll metodu

Giriş
WaitAll metodundan farklı olarak tüm Task'ların sonuçların alabilmemizi sağlar. await ile kullanılmak üzere tasarlanmıştır.

Örnek
Tüm sonuçları bir diziye almak için şöyle yaparız.
object[] allObjectAttributes = await Task.WhenAll(
    Task.Run(() => ...),
    Task.Run(() => ...),
    Task.Run(() => ...),
    Task.Run(() => ...)
);
Örnek
Şöyle yaparız.
public static async Task Run()
{
  List<Task> tasks = new List<Task>();

  Task t1 = Task.Run(()=>...);
  Task t2 = Task.Run(() =>...);

  tasks.Add(t1);
  tasks.Add(t2);

  await Task.WhenAll(tasks);  //ERROR IS THROWN HERE
  Console.WriteLine("All tasks completed");
}
Örnek
Linq ile tüm sonuçları dolaşmak için şöyle yaparız.
private static async Task<string> checkAvaibleAsync(string url)
{
  using (var client = new HttpClient())
  {
    string htmlCode = await client.GetStringAsync(url); 

    if (...)
      return url;
    else
      return null;
  }
}
Bu metodu şöyle çağırırız.
private static async Task<string[]> searchForLinksAsync()
{
  string url = "http://www.xxxx.pl/xxxx/?action=xxxx&id=";

  var tasks = Enumerable.Range(0, 2500).Select(i => checkAvailableAsync(url + i));
  var results = await Task.WhenAll(tasks);
  var listOfUrls = results.Where(x => x != null).ToArray();

  Console.WriteLine(listOfUrls.Length);
  Console.ReadLine();
}



Hiç yorum yok:

Yorum Gönder