Eu tenho um método:
private async Task CopyFormInfoToSourceObject(SchedulerAppointmentOperationEventArgs arg)
{
// lots of code
}
E quero chamá-lo da seguinte forma:
private async Task AppointmentInserting(SchedulerAppointmentOperationEventArgs arg)
{
return CopyFormInfoToSourceObject(arg);
}
Mas isso não será compilado. Diz que os tipos de retorno não correspondem e o assíncrono não é necessário.
Não entendo por que isso não compila. O tipo de retorno é async Task
para ambos.
async
não faz parte da assinatura do método, é um modificador que permite usarawait
dentro do método, portanto o tipo de retorno éTask
em ambos os casos.async
é expandido pelo compilador em uma máquina de estado assíncrono ( How Async/Await Really Works in C# ) que transforma o tipo retornado (se houver)T
emTask<T>
. Ou seja (com algumas simplificações) se tiverreturn new object();
instrução noasync
método ela será transformadaTask<object>
(se o método retornarTask<object>
). RetornarTask
doasync
método é equivalente a retornarvoid
de um método não assíncrono. Removaasync
do segundo:ou remova
return
e adicioneawait
:Veja também: