AFAIK ทั้งหมดก็รู้ก็คือว่าในบางจุดของมันSetResult
หรือSetException
วิธีการที่จะถูกเรียกตัวไปดำเนินการTask<T>
สัมผัสผ่านTask
คุณสมบัติ
กล่าวอีกนัยหนึ่งมันทำหน้าที่เป็นผู้อำนวยการสร้างTask<TResult>
และเสร็จสมบูรณ์
ฉันเห็นตัวอย่างที่นี่ :
หากฉันต้องการวิธีในการรัน Func แบบอะซิงโครนัสและมีภารกิจเพื่อแสดงการดำเนินการนั้น
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;
}
ซึ่งสามารถนำมาใช้ * ถ้าฉันไม่ได้มีTask.Factory.StartNew
- แต่ผมไม่Task.Factory.StartNew
ได้
คำถาม:
ใครจะกรุณาอธิบายโดยยกตัวอย่างเช่นสถานการณ์ที่เกี่ยวข้องโดยตรงจะTaskCompletionSource
ไม่ไปสมมุติสถานการณ์ที่ผมไม่ได้ Task.Factory.StartNew
?