Ich habe eine einfache Konsolen-App erstellt, um es zu testen:
Code: Select all
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);
}
}
Code: Select all
Main: 8
Main Async: 8
thisIsAsyncStart: 8
thisIsAsyncEnd: 9
Main End: 8
BEARBEITEN:
Ich habe den Code wie in der Antwort unten vorgeschlagen aktualisiert, um auf Task.Delay(1) zu warten, aber ich sehe immer noch die gleichen Ergebnisse.
Zitat aus der Antwort unten:
Vielmehr ermöglicht es die Aufteilung der Methode in mehrere Teile, von denen einige möglicherweise asynchron ausgeführt werden.
Ich möchte wissen, wo das ist Der asynchrone Teil wird ausgeführt, wenn keine anderen Threads erstellt wurden?
Wenn er im selben Thread ausgeführt wird, sollte er ihn dann nicht aufgrund einer langen E/A-Anforderung blockieren oder ist der Compiler intelligent? genug, um diese Aktion in einen anderen Thread zu verschieben, wenn es zu lange dauert, und a Neuer Thread wird doch verwendet?