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
C
onsole.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