asyncmetody różnią się od zwykłych metod. Cokolwiek zwracasz z asyncmetod, 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 intnie Task<int>. Kompilator będzie przekonwertować intdo 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 awaitinstrukcji nie jest async.