AFAIK, alles was es weiß ist, dass irgendwann seine SetResultoder SetExceptionMethode aufgerufen wird, um die Task<T>Belichtung durch seine TaskEigenschaft zu vervollständigen .
Mit anderen Worten, es fungiert als Produzent für a Task<TResult>und dessen Fertigstellung.
Ich habe hier das Beispiel gesehen:
Wenn ich eine Möglichkeit brauche, eine Func asynchron auszuführen und eine Aufgabe zu haben, um diese Operation darzustellen.
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;
}
Welche verwendet * werden könnte , wenn ich nicht Task.Factory.StartNew- aber ich tun haben Task.Factory.StartNew.
Frage:
Kann jemand ein Szenario mit gutem Beispiel erklären Sie sich bitte im Zusammenhang direkt an TaskCompletionSource
und nicht auf eine hypothetische Situation , in der ich nicht habe Task.Factory.StartNew?