c # async działa w jednym wątku?
czytałemhttp://msdn.microsoft.com/en-US/library/vstudio/hh191443.aspx. Przykładowy kod:
async Task<int> AccessTheWebAsync()
{
// You need to add a reference to System.Net.Http to declare client.
HttpClient client = new HttpClient();
// GetStringAsync returns a Task<string>. That means that when you await the
// task you'll get a string (urlContents).
Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
// You can do work here that doesn't rely on the string from GetStringAsync.
DoIndependentWork();
// The await operator suspends AccessTheWebAsync.
// - AccessTheWebAsync can't continue until getStringTask is complete.
// - Meanwhile, control returns to the caller of AccessTheWebAsync.
// - Control resumes here when getStringTask is complete.
// - The await operator then retrieves the string result from getStringTask.
string urlContents = await getStringTask;
// The return statement specifies an integer result.
// Any methods that are awaiting AccessTheWebAsync retrieve the length value.
return urlContents.Length;
}
Strona mówi również:
Asynchroniczne i oczekujące słowa kluczowe nie powodują tworzenia dodatkowych wątków. Metody asynchroniczne nie wymagają wielowątkowości, ponieważ metoda asynchroniczna nie działa we własnym wątku
Czy to „nie jest tworzony żaden dodatkowy wątek” w zakresie metody oznaczonej jako asynchroniczna?
Wyobrażam sobie, że zarówno GetStringAsync, jak i AccessTheWebAsync będą działać w tym samym czasie (w przeciwnym razie GetStringAsync nigdy się nie skończy, ponieważ AccessTheWebAsync ma teraz kontrolę), ostatecznie GetStringAsync musi działać na innym wątku niż wątek AccessTheWebAsync.
Dla mnie pisanie metody asynchronicznej jest użyteczne tylko wtedy, gdy nie dodaje się więcej wątków, gdy metoda, na którą czeka, jest również asynchroniczna (która już używa dodatkowego wątku do zrobienia własnej rzeczy równolegle)
Czy moje zrozumienie jest prawidłowe?