Articles of multithreading

Directives sur le moment d’utiliser le locking

J’aimerais savoir s’il existe des directives qu’un développeur devrait suivre pour savoir quand (et où) placer des verrous. Par exemple: Je comprends que ce code doit être verrouillé afin d’éviter la possibilité qu’un autre thread modifie la valeur de SomeHeapValue de manière inattendue. class Foo { public SomeHeapObject myObject; public void DoSummat(object inputValue_) { myObject.SomeHeapValue […]

Combien de tâches sont trop nombreuses?

Je travaille actuellement sur une application qui s’appuie sur de nombreux services Web pour obtenir des données. Puisque je veux modulariser chaque service et avoir un peu de dépendance (le service 1 doit être exécuté avant les services 2 et 3, etc.), j’exécute chaque service dans sa propre tâche. Les tâches elles-mêmes sont soit en […]

Comment empêcher System.Timers.Timer de se mettre en queue pour une exécution sur un pool de threads?

Il y a un problème avec le comportement standard System.Timers.Timer. La timer déclenche l’événement Elapsed avec un intervalle. Mais lorsque le temps d’exécution dans le gestionnaire d’événements Elapsed dépasse l’intervalle du minuteur, le pool de threads commence à gérer les événements en queue. C’est un problème dans mon cas. En effet, avec mon gestionnaire d’événements […]

Thread.Start ne renvoie pas dans certains cas rares dans mon application c #

J’ai écrit une application serveur TCP en c #. L’application écoute les connexions entrantes Utilisation de la méthode TcpListener.AcceptTcpClient () dans le fil du programme d’écoute principal. Lorsqu’une connexion est reçue, TcpListener.AcceptTcpClient () débloque et renvoie l’object TCPClient. À la réception d’une connexion, un nouveau thread est créé et commence à lire les données d’écriture […]

Comment exécuter un ensemble de fonctions en parallèle et attendre les résultats à la fin?

Je dois exécuter un ensemble de fonctions lourdes de manière asynchrone à sametime et renseigner les résultats dans une liste. Voici le pseudo-code pour cela: List results = new List(); List<Func> tasks = PopulateTasks(); foreach(var task in tasks) { // Run Logic in question 1. Run each task asynchronously/parallely 2. Put the results in the […]

Initialisation thread-safe de variables statiques

J’utilise ce modèle pour initialiser des données statiques dans mes classes. Cela me semble sûr, mais je sais à quel point les problèmes de filetage peuvent être subtils. Voici le code: public class MyClass // bad code, do not use { static ssortingng _myResource = “”; static volatile bool _init = false; public MyClass() { […]

Annulation multithreading sur plusieurs classes avec TPL

Tous, j’ai un long processus que je lance sur un thread en arrière-plan (avec support d’annulation) en utilisant la bibliothèque de tâches parallèle (TPL). Le code de cette longue tâche taks est contenu dans la Class Validation , et lorsque la méthode public bool AsyncRunValidationProcess(TaskScheduler _uiScheduler, CancellationToken _token, dynamic _dynamic = null) { try { […]

Accès aux membres de classe avec Invoke à partir d’un autre thread en C #

Remarque : Partie d’une série: C #: Accès aux membres d’un formulaire d’une autre classe et Comment accéder à des objects de formulaire d’un autre fichier cs en C # . Bonjour, L’idée est d’avertir l’utilisateur utilisant le mémo lorsqu’un paquet est reçu / envoyé dans un client TCP. Après quelques corrections, la solution la […]

Séparer les threads d’un service Web une fois celui-ci terminé

Si cela a été demandé avant mes excuses et qu’il s’agit de services Web .NET 2.0 ASMX, encore une fois mes excuses = D Une application .NET qui expose uniquement les services Web. Environ 10 millions de messages par jour sont équilibrés entre plusieurs serveurs IIS. Chaque message entrant est un fichier XML et un […]

Tâche vs delegates asynchrones en c #?

J’ai cette méthode simple: static int Work (ssortingng s) { return s.Length; } Je pourrais le lancer avec: Task task = Task.Factory.StartNew (() => Work (“lalala”) ); … int result = task.Result; Ou avec ceci: Func method = Work; IAsyncResult myIasync= method.BeginInvoke (“lalala”, null, null); … int result = method.EndInvoke (myIasync); Ils utilisent tous les […]