nie przeczytałem kodu i przeczytałem, że zrozumiałem podstawy słów kluczowych oczekujących i asynchronicznych w odniesieniu do System.Threading.Task.Oczekiwanie na zadania: Zwróć zadanie lub poczekaj, jeśli po upływie
Nie jestem jednak pewien, czy mam rację, jeśli chodzi o mały problem, i szukam weryfikacji lub czy ktoś mnie poprawi.
mam wdrożenie metody asynchronicznej, z tym podpisem:
public Task ProcessUploadedFile(FileInfo info, string contentType);
Oczywiście, jeśli chcę coś czekają wewnątrz metody, muszę dodać słowa kluczowego asynchronicznej do podpisu,
Moje pytanie brzmi następująco: jeśli ostatnią rzeczą, którą robi moja metoda, jest wywołanie innej metody asynchronicznej lub zwrócenie zadania, czy jest na to jakiś moment oczekiwania?
Np.
1:
public async Task ProcessUploadedFile(FileInfo info, string contentType)
{
foreach (var something in someCollection)
DoSomething();
DoSomethingElse();
await DoMethodAsync();
}
2:
public Task ProcessUploadedFile(FileInfo info, string contentType)
{
foreach (var something in someCollection)
DoSomething();
DoSomethingElse();
return DoMethodAsync();
}
Początkowo pisał tego pierwszego, ale może już nie widzę sensu w dodaniu czekają. Gdybym miał napisać to ostatnie, osiągnąłem to samo, a osoba dzwoniąca z obu metod może nadal używać słowa kluczowego oczekującego, jeśli tak, nie?
Czy są jakieś różnice w powyższym? Który jest "lepszy"?
Świetnie, że to, co myślę. Dzięki! –
Czekaj. Czy mogę po prostu coś wyjaśnić? W twojej przepisanej wersji mojego kodu masz DoSomething() i DoSomethingElse() w Task.Factory.StartNew() ... czy to prawda? Myślałem, że te bity będą działały synchronicznie, w tym samym wątku, co dzwoniący? I będzie to DoMethodAsync(). ContinueWith (t => {} _); ? –
@dark_perfect Przepraszam, był w pośpiechu. I tak, masz całkowitą rację. Zaktualizowany kod: –