Я недавно читал об async/wait, и я смущен тем, что многие из статей/сообщений, которые я читал, указывают, что новый поток не создается при использовании async wait (Пример).
Я создал простое консольное приложение, чтобы проверить его
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:
Я обновил код, как было предложено в ответе ниже, await Task.Delay(1)
, но я все еще вижу те же результаты.
Цитата из ответа ниже:
Rather, it enables the method to be split into multiple pieces, some of which may run asynchronously
Я хочу знать, где выполняется asynchronously
часть, если нет других потоков, созданных?
Если он работает в одном потоке, не следует ли его блокировать из-за длительного запроса ввода-вывода или компилятор достаточно умен, чтобы переместить это действие в другой поток, если он занимает слишком много времени, а новый поток используется после всех?