Come è possibile eseguire un'attività che restituisce un valore e accetta un parametro? Vedo che c'è un metodo sovraccarico Task.Run<TResult>(Func<TResult>)
ma come posso passare un parametro lì?Task.Run e Func <>
11
A
risposta
27
Func<TResult>
non accetta un parametro. In genere, è acquisire il parametro utilizzando invece un'espressione lambda. Per esempio:
public void DoSomething(string text)
{
Task<int> task = Task.Run(() => text.Length);
...
}
Qui text
è un catturato variabile ... quindi anche se si sta solo creando un Func<int>
, è usando il parametro del metodo.
6
È possibile utilizzare gli overload di Task.Factory.StartNew() per passare in un oggetto "stato" che contiene tutti i parametri che si desidera utilizzare. Ecco un esempio molto semplice che passa in un NameValueCollection, ma potresti ovviamente passare qualsiasi tipo di oggetto che volevi.
Task<bool>.Factory.StartNew(
(a) => {
NameValueCollection nvc = a as NameValueCollection;
if(nvc != null) {
nvc.AllKeys.ForEach(k => Console.WriteLine(nvc[k]));
}
return true;
},
new NameValueCollection() { { "param1", "hithere!" } });
Problemi correlati
- 1. Func <T>() vs Func <T> .Invoke()
- 2. Come convertire Func <T,bool> a Expression <Func<T,bool>>
- 3. C# Func <> e generics
- 4. Come utilizzare Task.Run (Azione <T>)
- 5. C# Come convertire un'espressione <Func <SomeType>> in un'espressione <Func <OtherType>>
- 6. Convertire Expression <Func <T1,bool>> per Expression <Func <T2,bool> dinamicamente
- 7. Async lambda a Expression <Func<Task>>
- 8. Creare un'espressione <Func<,>> utilizzando la riflessione
- 9. Elenco di espressioni <Func <T, TProperty >>
- 10. Func <TObject, bool> o Predicate <TObject>?
- 11. Convertire Func <T, String> in Func <T, bool>
- 12. Expression <Func <T, bool>> da un F # func
- 13. Perché Func <> ed Expression <Func<>> Intercambiabile? Perché uno lavora nel mio caso?
- 14. Passaggio di una condizione in Func <bool> di una tupla <stringa, stringa, Func <bool>>
- 15. LINQ-to-SQL: Converti Func <T, T, bool> in un'espressione <Func <T, T, bool>>
- 16. Come posso eseguire un oggetto Func <oggetto [], espressione <Func<T,bool> >> dinamico?
- 17. Azione uguale a Func <TResult>?
- 18. Func <T> con parametro out
- 19. Come funziona Func <T,TResult>?
- 20. Func Nullable <T, TResult>
- 21. Tipi dinamicamente Func <> tipi
- 22. Come convertire IQueryable <T> in Expression <Func <T, bool>>?
- 23. dinamica Func <IQueryable <TEntity>, IOrderedQueryable <TEntity>> Espressione
- 24. Come convertire un'espressione <Func <T, bool>> in un predicato <T>
- 25. Creazione di Func <IQueryable <TEntity>, IOrderedQueryable <TEntity>> dinamicamente?
- 26. Convertire Expression <Func <T, T2, bool>> a Expression <Func <T2, bool>> introducendo una costante per T
- 27. Java equivalente di .NET Action <T> e Func <T,U>, ecc.
- 28. Espressione <Func <TModel, stringa >> su Expression <Azione <TModel>> "Getter" su "Setter"
- 29. Come convertire Espr <'a -> 'b> per Expression <Func <'a, obj>>
- 30. Perché Func <T,bool> invece di Predicato <T>?
Il thread è sicuro? – BVernon
@BVernon: Supponendo che in seguito non si cambi il valore di 'text', mi sembra soddisfacente. –
Penso che mi sto semplicemente dimenticando di alcune cose davvero fondamentali ... se chiamo DoSomething più volte con valori diversi per il testo, allora ci sarà una copia di ogni versione in memoria per ogni chiamata, giusto? – BVernon