6
votes

Annulation du délai de tâche dans .NET 4.0

J'essaie actuellement de mettre en œuvre un substitut de la tâche Task.Delay () CODE> Méthode dans un programme qui doit cibler .NET 4.0. J'ai trouvé le code suivant à Ce blog .

Task Delay (int milliseconds, CancellationToken token)        // Asynchronous NON-BLOCKING method
{
    var tcs = new TaskCompletionSource<object>();
    new Timer (_ => tcs.SetResult (null)).Change (milliseconds, -1);
    return tcs.Task;
}


1 commentaires

Microsoft fournit un package Nuget Microsoft.bcl.async qui porte beaucoup de Ajouté 4.5 Caractéristiques à 4.0. Vous pouvez accéder à retard via taskex.delay () si vous avez le package.


3 Réponses :


2
votes

J'aime Ce :

token.Register(() => tcs.TrySetCancelled());


1 commentaires

Où va-t-il dans le contexte? Pardonne-moi si cela semble évident, il y a plusieurs concepts nouveaux pour moi ici.



4
votes

J'ai essayé de changer votre code le moins possible, mais voici un exemple de travail qui se comporte de la même manière que la tâche.

Il est important de noter que j'utilise trysetcanceled et trysetreresult car la minuterie pourrait finir après l'annulation de la tâche. Idéalement, vous voulez arrêter la minuterie.

NOTEZ aussi une tâche annulée lancera une TaskCanceledException xxx

lire un peu plus dans votre question. Si vous avez besoin de tâches.delay et que vous ciblez .NET 4.0, vous devez utiliser le package Microsoft Async Nuge de http://www.nuget.org/packages/microsoft.bcl.async/ Il contient la méthode taskex.delay


2 commentaires

C'est une grande réponse à deux fois. En fait, j'ai déjà eu Microsoft.bcl.Async installé dans mon projet, mais je ne me suis pas réalisé qu'ils cachaient ces méthodes sous Taskex. Merci pour l'explication à long terme du contexte et la pointe de l'extension de la BCL.


Initialiser une annulationTokensource avec un délai d'attente n'est pas possible dans .NET 4.0



0
votes

Vous êtes ici une version qui empêche l'élimination de la minuterie par le collecteur des ordures xxx


0 commentaires