versuchen zu verstehen, warum die Aufgaben gestartet werden, wenn ToArray() ausgeführt wird. und warum der Breakpoint, den ich in die DoSomething-Methode einfüge, niemals getroffen wird.LINQ/async/erwarten
private async void MyMethod()
{
await NewMethod();
string[] array = { "http://google.com", "http://microsoft.com"};
IEnumerable<Task<string>> query = from url in array select DoSomething(url);
Task<string>[] tasks = query.ToArray();
string[] contents = await Task.WhenAll(tasks);
}
private async Task<string> DoSomething(string url)
{
HttpClient hc = new HttpClient();
string content = await hc.GetStringAsync(url);
return content;
}
wenn die ToArray() tatsächlich die Aufgaben beginnt, wird die Ausführung an den einzelnen Stützpunkten in der DoSomething Methode stoppen soll, richtig?
danke
das ist das Verhalten von Linq. Die tatsächliche Abfrage wird nur ausgeführt, wenn Sie etwas mit der Ergebnismenge wünschen. Sehen Sie sich die verzögerte und direkte Abfrageausführung in linq an. –
Geben Sie den DoSomething-Code an und zeigen Sie an, wo Sie den Breakpoint platzieren. Es gibt einige Aufgaben, die zurückgegeben werden, die Sie noch ausführen müssen, glaube ich. –
Und zeigen Sie uns, wie Sie die '' task's ('warten',' WaitAll() ',' WhenAny() 'usw. ausführen. – dymanoid