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