De la tâche.Usine.StartNew avec des paramètres et valeurs de retour
Tente d'appeler une méthode qui nécessite des paramètres afin d'obtenir un résultat, et de transmettre le résultat de procéder. Mais je suis de nouveau à la zone de travail et n'arrive pas à comprendre la syntaxe correcte. Toute aide serait appréciée.
Task.Factory.StartNew(() =>
CheckConflict(startDate, endDate, actID, repeatRule,whichTime))
.ContinueWith(
GetConflictDelegate(result),
TaskScheduler.FromCurrentSynchronizationContext);
OriginalL'auteur Rick | 2014-03-10
Vous devez vous connecter pour publier un commentaire.
En supposant que vous voulez continuer avec le résultat de
CheckConflict()
,ContinueWith
prend unTâche<T>
comme argument.Task<T>
a une propriétéResult
, qui sera le résultat de l'invocation de la méthode.Voir mon extrait de code ci-dessous pour un exemple.
Si la synchronisation actuel contexte représente le thread principal, oui. Si elle ne le fait pas, il va revenir à ce contexte, il a été dans.
OriginalL'auteur Xenolightning
Je vous recommande d'utiliser
async
/await
:Si vous n'êtes pas sur ASP.NET, alors vous pouvez utiliser
Microsoft.Bcl.Async
. (qui aTaskEx.Run
).Je suis limité à asp.net 4 malheureusement, en utilisant mvc. De ce que j'ai rassemblé les async modificateur n'est entré en existence dans .net 4.5. J'ai lu votre blog ici blog.stephencleary.com/2012/02/async-and-await.html (très sympa d'ailleurs) mais lorsque j'essaie de l'attendent des exemples de son me disant que j'ai besoin d'une référence à une autre assemblée, et que im ciblant la mauvaise version de .net. Il me semble avoir eu un certain succès avec TaskFactory mais j'ai lu que ce n'est pas très sûr. Toutes les suggestions?
Vous ne devriez pas utiliser
Run
ouStartNew
sur ASP.NET à tous. Je vous suggère de vous poser une question de votre propre décrivant ce que vous êtes en train d'essayer de faire (et note que vous êtes coincé sur .NET 4.0).Merci Stephen, malade de le faire.
OriginalL'auteur Stephen Cleary
Essayer celui-ci
OriginalL'auteur DevEstacion
Vous avez besoin de la
Task<TResult>
classe (voir MSDN - TaskFactory.StartNew-Methode (Func, Objet).<TResult>
est le type de retour de votre méthode invoquée.Parce que vous commencer un nouveau thread, vous devez attendre jusqu'à ce que le thread est terminé sans bloquer le thread principal ou de direction de la messagepump arrêter. C'est là que vous pouvez utiliser async et await.
En supposant une méthode Calculate() qui prend deux paramètres de type
double
et retournant un résultat dedouble
et un deuxième méthode Validate() qui valide le résultat. La solution pourrait ressembler à ceci:La
await
retourne vers la l'appelant thread (thread qui appelle CalculateAsync() ) pour empêcher le verrouillage et que la tâche est en cours d'exécution. Dans le même tempsawait
les forces de l'CalculateAsync() pour être traitées jusqu'à la ligne où la tâche est démarrée et attend jusqu'à ce que la tâche est terminée. Le reste de la CalculateAsync() seront ensuite traitées.Sans
await
l'ensemble de la méthode de l'être traités avant que la tâche est terminée ou simultanément à l'exécution de la tâche.La
Task<TResult>
classe (où<TResult>
est l'espace réservé pour votre type de retour) a une propriétéResult
qui contient la valeur de retour de type<TResult>
.OriginalL'auteur BionicCode
Cela fonctionne:
Correct il utilise un ensemble de valeurs plus tôt dans la méthode.
OriginalL'auteur Rick