Je suis nouveau en C# et maintenant j'essaye d'apprendre async et d'attendre en trouvant mon propre exemple. Mais j'ai de la difficulté à l'appliquer. Fondamentalement, je volé cet exemple de MSDN: https://msdn.microsoft.com/en-us/library/system.collections.ienumerable(v=vs.110).aspxRemplir la liste séparément en utilisant async et attendre
Mais dans la méthode principale, au lieu de ce qui est là, je mets:
static void Main(string[] args)
{
Person[] pArray = new Person[100];
//populate first 50 people
//TODO: USE ASYNC
//populate last 50 people
//TODO: USE ASYNC
//await here
People peopleList = new People(pArray);
//do some linq
Console.ReadKey();
}
Je ne sais pas vraiment comment mettre en œuvre la partie TODO (je suis Je ne sais pas si c'est comme ça que vous le faites). Dois-je créer une méthode de tâche parallèle à main? Mais le pArray ne sera pas global de cette façon et la fonction de tâche ne devrait pas pouvoir modifier la variable, non? Je me demandais comment vous pourriez mettre en œuvre cela. Tous les conseils seront appréciés!
Merci!
J'ai peur que ce n'est pas une bonne approche pour apprendre à utiliser 'await' (ou plus généralement, concurrency/asynchronny/parallelism). Tout d'abord, vous voulez éviter tout état partagé (dans ce cas, 'pArray') - à la place, vous devriez idéalement faire en sorte que chacune des méthodes asynchrones renvoient leurs propres parties des données, et vous les regrouperiez simplement sur le fil principal. Deuxièmement, vous devez vous assurer que 'await' a un endroit où retourner - dans votre code,' Main' s'arrêtera tout simplement et tue tout dès que vous frapperez le premier 'await'. Essayez www.albahari.com/threading/ pour un primer :) – Luaan
Je peux me tromper, mais le tableau n'est pas thread-safe .. Donc vous devriez commencer par la collection thread-safe en premier. Ensuite, vous pouvez continuer à le remplir par des fils comme vous le souhaitez. Ou dans chaque thread, utilisez l'instance de sauvegarde de l'objet pour VERROUILLER le pArray lors de manipulations. Sinon, le monde multithread mortel ne vous mettrait pas à merci. ;) * fil de sécurité: collections https://msdn.microsoft.com/en-us/library/dd997305(v=vs.110).aspx Comment verrouiller: https://msdn.microsoft .com/fr-fr/library/c5kehkcz.aspx – Anatolyevich
@Luaan que faire si je le change en pArray1 et et pArray2, 50 longueur chacun? Je veux qu'ils peuplent en même temps si tard, je pourrais être en mesure d'attendre et faire un peu de linq sur ces deux tableaux? –