async
metody różnią się od zwykłych metod. Cokolwiek zwracasz z async
metod, jest opakowane w plik Task
.
Jeśli nie zwrócisz żadnej wartości (void), zostanie ona zapakowana Task
, jeśli zwrócisz int
, zostanie zapakowana Task<int>
i tak dalej.
Jeśli twoja metoda asynchroniczna wymaga zwrócenia int
, oznacz typ zwracania metody jako, Task<int>
a zwrócisz zwykły, a int
nie Task<int>
. Kompilator będzie przekonwertować int
do Task<int>
dla ciebie.
private async Task<int> MethodName()
{
await SomethingAsync();
return 42;//Note we return int not Task<int> and that compiles
}
Tak samo, kiedy zwracasz Task<object>
zwracany typ metody powinien byćTask<Task<object>>
public async Task<Task<object>> MethodName()
{
return Task.FromResult<object>(null);//This will compile
}
Ponieważ Twoja metoda zwraca Task
, nie powinna zwracać żadnej wartości. W przeciwnym razie nie będzie się kompilować.
public async Task MethodName()
{
return;//This should work but return is redundant and also method is useless.
}
Należy pamiętać, że metoda asynchroniczna bez await
instrukcji nie jest async
.