Task<T>
สามารถแปลงเป็นปริยายได้Task
ดังนั้นเพียงแค่ทำให้เสร็จสมบูรณ์Task<T>
(มีT
ค่าใด ๆ และค่าใด ๆ ) และใช้สิ่งนั้น คุณสามารถใช้สิ่งนี้เพื่อซ่อนความจริงที่ว่าผลลัพธ์ที่แท้จริงอยู่ที่นั่นที่ไหนสักแห่ง
private static Task completedTask = Task.FromResult(false);
public static Task CompletedTask()
{
return completedTask;
}
โปรดทราบว่าเนื่องจากเราไม่ได้เปิดเผยผลลัพธ์และงานนั้นเสร็จสมบูรณ์เสมอเราสามารถแคชงานเดียวและนำมาใช้ซ้ำได้
หากคุณใช้. NET 4.0 และยังไม่มีFromResult
คุณสามารถสร้างของคุณเองโดยใช้TaskCompletionSource
:
public static Task<T> FromResult<T>(T value)
{
var tcs = new TaskCompletionSource<T>();
tcs.SetResult(value);
return tcs.Task;
}
It seems like the answer I'm getting from everyone is that using a garbage value like this is the correct way. That there isn't a way to do this without the garbage value is disappointing -- oh well.
คุณคิดว่าปัญหานี้มีปัญหาอะไร หากคุณแคชเพียงครั้งเดียวTask
โปรแกรมทั้งหมดของคุณจะใช้หน่วยความจำเพิ่มอีกหนึ่งบิต นั่นคืออะไร นอกจากนี้หนึ่งสามารถสร้างงานที่เสร็จสมบูรณ์โดยไม่ทำอย่างนั้นมันก็จะไม่ดีขึ้น