AFAIK, tout ce qu'il sait, c'est qu'à un moment donné, sa SetResult
ou SetException
méthode est appelée pour compléter l' Task<T>
exposition à travers sa Task
propriété.
En d'autres termes, il agit en tant que producteur pour a Task<TResult>
et son achèvement.
J'ai vu ici l'exemple:
Si j'ai besoin d'un moyen d'exécuter un Func de manière asynchrone et d'avoir une tâche pour 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;
}
Ce qui pourrait être utilisé * si je n'ai pas Task.Factory.StartNew
- mais je n'avoir .Task.Factory.StartNew
Question:
Quelqu'un peut -il expliquer par exemple s'il vous plaît un scénario lié directement à TaskCompletionSource
et non à une hypothétique situation dans laquelle je n'ai pas Task.Factory.StartNew
?