Task<T>
es implícitamente convertible a Task
, así que solo obtenga un completado Task<T>
(con T
cualquier valor) y úselo. Puede usar algo como esto para ocultar el hecho de que un resultado real está allí, en alguna parte.
private static Task completedTask = Task.FromResult(false);
public static Task CompletedTask()
{
return completedTask;
}
Tenga en cuenta que dado que no estamos exponiendo el resultado, y la tarea siempre se completa, podemos almacenar en caché una sola tarea y reutilizarla.
Si está utilizando .NET 4.0 y no lo tiene FromResult
, puede crear el suyo usandoTaskCompletionSource
:
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.
¿Qué problemas crees que tiene esto? Si almacena un solo caché,Task
todo su programa ocupa un bit adicional de memoria. Eso es nada . Además, uno podría crear una tarea completa sin hacer eso, simplemente no sería mejor.