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