Асинхронный/ожидание другого идентификатора потокаC#

Место общения программистов C#
Ответить
Anonymous
 Асинхронный/ожидание другого идентификатора потока

Сообщение Anonymous »

Недавно я читал об async/await, и меня смутил тот факт, что во многих статьях/сообщениях, которые я читал, говорится, что новый поток не создается при использовании async await (пример).
Для тестирования я создал простое консольное приложение:

Код: Выделить всё

class Program
{
static  void Main(string[] args)
{
Console.WriteLine("Main: " + Thread.CurrentThread.ManagedThreadId);
MainAsync(args).Wait();
Console.WriteLine("Main End: " + Thread.CurrentThread.ManagedThreadId);

Console.ReadKey();
}

static async Task MainAsync(string[] args)
{
Console.WriteLine("Main Async: " + Thread.CurrentThread.ManagedThreadId);

await thisIsAsync();
}

private static async Task thisIsAsync()
{
Console.WriteLine("thisIsAsyncStart: " + Thread.CurrentThread.ManagedThreadId);
await Task.Delay(1);
Console.WriteLine("thisIsAsyncEnd: " + Thread.CurrentThread.ManagedThreadId);

}
}
Вывод следующего кода:

Код: Выделить всё

Main: 8
Main Async: 8
thisIsAsyncStart: 8
thisIsAsyncEnd: 9
Main End: 8
Я упускаю суть или «thisIsAsyncEnd» имеет другой идентификатор потока, чем другие действия?
EDIT:
Я обновил код, как предложено в ответе ниже, чтобы дождаться Task.Delay(1), но по-прежнему вижу те же результаты.
Цитата из ответа ниже:

Скорее, он позволяет разделить метод на несколько частей, некоторые из которых могут выполняться асинхронно.

Я хочу знать, где выполняется часть асинхронно, если не создано других потоков?
Если она выполняется в том же потоке, не должна ли она блокироваться из-за долгого I/ O запрос, или компилятор достаточно умен, чтобы перенести это действие в другой поток если это займет слишком много времени и все-таки будет использоваться новый поток?


Подробнее здесь: https://stackoverflow.com/questions/338 ... -thread-id
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»