Task<T>
é implicitamente conversível em Task
, portanto, basta obter um preenchimento Task<T>
(com todo T
e qualquer valor) e usá-lo. Você pode usar algo assim para ocultar o fato de que um resultado real existe, em algum lugar.
private static Task completedTask = Task.FromResult(false);
public static Task CompletedTask()
{
return completedTask;
}
Observe que, como não estamos expondo o resultado e a tarefa está sempre concluída, podemos armazenar em cache uma única tarefa e reutilizá-la.
Se você estiver usando o .NET 4.0 e não o tiver FromResult
, poderá criar seu próprio usando 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.
Que problemas você acha que isso tem? Se você armazenar em cache um únicoTask
, todo o seu programa ocupará um pouco mais de memória. Isso não é nada . Além disso, pode-se criar uma tarefa concluída sem fazer isso, simplesmente não seria melhor.