Comment puis-je attribuer un nom à une tâche dans le TPL
Je vais utiliser beaucoup de tâches en cours d'exécution de mon application. Chaque tas de tâches est en cours d'exécution pour une raison quelconque. Je voudrais le nom de ces tâches alors, quand je regarde la fenêtre Tâches Parallèles, je pourrais les reconnaître facilement.
Avec un autre point de vue, considérer que je suis en utilisant des tâches au niveau du cadre pour remplir une liste. Un développeur qui utilise mon cadre est également à l'aide de tâches pour son travail. Si elle regarde à la Fenêtre Tâches Parallèles, elle va trouver certaines tâches ayant aucune idée à ce sujet. Je veux le nom de tâches afin qu'elle puisse distinguer le cadre des tâches à partir de ses tâches.
Il serait très pratique si il y avait une telle API:
var task = new Task(action, "Growth calculation task")
ou peut-être:
var task = Task.Factory.StartNew(action, "Populating the datagrid")
ou même en travaillant avec des Parallel.ForEach
Parallel.ForEach(list, action, "Salary Calculation Task"
Est-il possible de nommer une tâche?
Est-il possible de donner Parallel.ForEach
une structure de nommage (peut-être l'aide d'un lambda) de sorte qu'il crée des tâches avec cette appellation?
Est-il une telle API quelque part que je suis absent?
J'ai aussi essayé d'utiliser un hérité de la tâche de remplacer c'est ToString(). Mais, malheureusement, la fenêtre Tâches Parallèles ne pas utiliser ToString()!
class NamedTask : Task
{
private string TaskName { get; set; }
public NamedTask(Action action, string taskName):base(action)
{
TaskName = taskName;
}
public override string ToString()
{
return TaskName;
}
}
OriginalL'auteur mehrandvd | 2012-12-07
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas vraiment le nom d'un
Task
, mais vous pouvez le nom de la méthode qui est exécutée par unTask
, qui est ensuite affichée dans le Parallèle des Tâches de windows. Donc, si le nommant laTask
s est important pour vous, ne pas utiliser les lambdas, utiliser des méthodes appelées.Étonnamment, cela fonctionne même avec
Parallel
, même si laTask
n'est pas de l'exécution de votre méthode directement. Je pense que c'est parce que les Tâches en Parallèle en quelque sorte connaîtTask
s deParallel
et les traite différemment.C'est une bonne solution, et une pratique. Merci. Mais Il était préférable de créer des noms. par exemple, le calcul de la personne, le calcul de la personne B, ... Une représentation paramétrique de nommage serait mieux... Mais ma question fondamentale est que pourquoi il n'existe pas un simple nom de propriété sur les tâches!
OriginalL'auteur svick
Vous pourrait concerner n'importe quel objet avec un objet. Voici une extension pour la Tâche. Il utilise une WeakReference donc, la tâche peut encore être nettoyés lorsque toutes les références sont hors de portée.
Utilisation:
Classe d'Extension:
OriginalL'auteur Mike de Klerk
Vous ne pouvez pas le nom des tâches.
La tâche de la bibliothèque est à l'intérieur à l'aide d'un pool de threads, de sorte que les threads ne peuvent pas être nommés. Aussi votre héritage approche ne fonctionnera pas, parce que les méthodes ".ContinueWith()" toujours créer une nouvelle tâche, qui n'est pas hériter de votre classe.
Parce qu'il n'est pas logique pour des tâches d'avoir un nom. Les tâches sont utilisés pour de courtes opérations asynchrones, pas pour longtemps demandes.
OriginalL'auteur JustAnotherUserYouMayKnow
Je ne pense pas que vous pouvez nommer les tâches.
Vous pouvez utiliser
Task.Id
à suivre les tâches.OriginalL'auteur varun257
Je suis prise de vue à l'aveugle ici que je ne connais pas le comportement du Parallèle des Tâches de la fenêtre, mais si il utilise l'api de débogueur l'ajout d'un DebuggerDisplay attribut sur votre NamedTask sous-classe peut aider
J'ai vérifié l'attribut. La fenêtre Tâches Parallèles ne l'utilise pas. En outre, nous pourrions remplacer les méthodes ToString() au lieu d'utiliser cet attribut.
OriginalL'auteur Adrian Zanescu
Si vous avez uniquement besoin de connaître le nom de la tâche après la tâche est terminée ensuite, vous pouvez simplement passer comme paramètre. De retour dans le résultat de la tâche.
Ou la carte de vos tâches à un dictionnaire
OriginalL'auteur r3verse
OriginalL'auteur Arvind Kumar Chaodhary
J'ai pensé que d'avoir un dictionnaire à l'aide de débogage, etc.
Voici un échantillon de ce que j'ai fait:
OriginalL'auteur Veverke
OriginalL'auteur Arvind Kumar Chaodhary