c # async é executado com um único thread?
eu estava lendohttp://msdn.microsoft.com/pt-BR/library/vstudio/hh191443.aspx. Exemplo de código:
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;
}
A página também diz:
As palavras-chave async e await não fazem com que threads adicionais sejam criados. Métodos assíncronos não requerem multithreading porque um método assíncrono não é executado em seu próprio segmento
Isso "nenhum segmento adicional é criado" se aplica dentro do escopo do método marcado como assíncrono?
Eu imagino que, para GetStringAsync e AccessTheWebAsync estar em execução ao mesmo tempo (caso contrário, GetStringAsync nunca terminará como AccessTheWebAsync tem controle agora), eventualmente, GetStringAsync tem que executar em um segmento diferente do thread do AccessTheWebAsync.
Para mim, escrever o método assíncrono é útil apenas para não adicionar mais thread quando o método que ele aguarda é também assíncrono (que já usa thread extra para fazer sua própria coisa em paralelo)
Meu entendimento é correto?