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
то вся ваша програма займає один додатковий біт пам'яті. Це нічого . Крім того, можна створити виконане завдання, не роблячи цього, краще не було б.