11
เมื่อใดที่ควรใช้ TaskCompletionSource <T>
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ได้ …