Je vais avoir du mal à comprendre : En quoi les scénarios TaskCompletionSource
?
Autant que je sache , Tout ce qu'il sait, c'est qu'à un certain point, son SetResult
ou SetException
méthode est appelée à compléter l' Task<T>
exposée en Task
de la propriété.
En d'autres termes , il agit à titre de producteur pour un Task<TResult>
et de son achèvement
J'ai vu ici l'exemple :
Si j'ai besoin d'un moyen pour exécuter une touche Func de manière asynchrone et ont une Tâche afin de représenter cette opération.
public static Task<T> RunAsync<T>(Func<T> function)
{
if (function == null) throw new ArgumentNullException("function");
var tcs = new TaskCompletionSource<T>();
ThreadPool.QueueUserWorkItem(_ =>
{
try
{
T result = function();
tcs.SetResult(result);
}
catch(Exception exc) { tcs.SetException(exc); }
});
return tcs.Task;
}
qui pourrait être utilisé si je n'avais pas Task.Factory.StartNew
Mais je n' ai Task.Factory.StartNew
Quelqu'un peut expliquer, par exemple, un scénario qui est liée directement à l' TaskCompletionSource
et de ne pas hypothétique de la situation dans laquelle je n'ai pas d' Task.Factory.StartNew
?