1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Samples
{
// Mériterait une implémentation plus conforme au Framework, avec IEnumerable ou avec une méthode pour récupérer le résultat sous forme de collection
public class Word
{
public Word(string alphabet, int size) { }
public byte[] Next { get; }
public bool HasNext { get; }
public byte[] Previous { get; }
public bool HasPrevious { get; set; }
}
public static class Parallelize
{
public static byte[] Process(byte[] item)
{
// Traiter le mot
return item;
}
public static void Run()
{
var tasks = new List<Task<byte[]>>();
var word = new Word("AB", 2);
while (word.HasNext)
{
var item = word.Next;
tasks.Add(Task.Run(() => Process(item)));
}
// On attend la fin des tâches
Task.WhenAll(tasks).Wait();
var results = tasks.Select(t => t.Result).ToArray();
// Traitement des résultats
}
// La même en async
public static async void RunAsync()
{
var tasks = new List<Task<byte[]>>();
var word = new Word("AB", 2);
while (word.HasNext)
{
var item = word.Next;
tasks.Add(Task.Run(() => Process(item)));
}
// On sort de la méthode en attendant la fin des tâches
await Task.WhenAll(tasks);
var results = tasks.Select(t => t.Result).ToArray();
// Traitement des résultats
}
}
} |
Partager