Task<T>
hoàn toàn có thể chuyển đổi thành Task
, vì vậy chỉ cần hoàn thành Task<T>
(với bất kỳ T
và bất kỳ giá trị nào) và sử dụng nó. Bạn có thể sử dụng một cái gì đó như thế này để che giấu sự thật rằng một kết quả thực tế ở đó, ở đâu đó.
private static Task completedTask = Task.FromResult(false);
public static Task CompletedTask()
{
return completedTask;
}
Lưu ý rằng vì chúng tôi không để lộ kết quả và tác vụ luôn hoàn thành, chúng tôi có thể lưu trữ một tác vụ duy nhất và sử dụng lại nó.
Nếu bạn đang sử dụng .NET 4.0 và không có FromResult
thì bạn có thể tự tạo bằng cách sử dụng 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.
Bạn nghĩ vấn đề này có vấn đề gì? Nếu bạn lưu trữ một bộ đệmTask
thì toàn bộ chương trình của bạn sẽ chiếm thêm một chút bộ nhớ. Không có gì . Ngoài ra, người ta có thể tạo ra một nhiệm vụ hoàn thành mà không làm điều đó, nó sẽ không tốt hơn.