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файл, тогда вся ваша программа занимает один дополнительный бит памяти. Это ничего . Кроме того, можно создать завершенную задачу, не делая этого, просто не будет ничего лучше.