Ich versuche, eine Klasse zu erstellen, die eine Zeichenfolge in einer Liste von Websites auf eine asynchrone Weise durchsuchen kann.Async & Tasks - Durchsuchen einer Liste von Websites
Der folgende Code funktioniert, aber ich bin ein Gefühl bekommen, dass es völlig falsch gemacht hat: var t = new Task<Task<SearchResult>>(() => SearchWebsiteAsync(url, str));
Gibt es sind:
public static class Searcher
{
public struct SearchResult
{
public SearchResult(string Url, bool Found)
{
this.Url = Url;
this.Found = Found;
}
public string Url;
public bool Found;
}
public async static Task<SearchResult> SearchWebsiteAsync(string url, string str)
{
HttpClient client = new HttpClient();
var urlContents = await client.GetStringAsync(url);
System.Console.WriteLine("Found string in website {0}", url);
bool foundString = (urlContents.Contains(str) ? true : false);
return new SearchResult(url, foundString);
}
public static async Task<IEnumerable<SearchResult>> StartSearch(string str)
{
List<SearchResult> results = new List<SearchResult>();
List<Task<SearchResult>> taskList = new List<Task<SearchResult>>();
foreach (var url in TheWeb.URLs)
{
System.Console.WriteLine("Searching URL {0}", url);
var t = new Task<Task<SearchResult>>(() => SearchWebsiteAsync(url, str));
t.Start();
taskList.Add(t.Result);
}
//Task.WaitAll(tasks.ToArray());
foreach (var task in taskList) {
results.Add(task.Result);
}
return results;
}
}
Vor allem, dass ich Task
‚s innerhalb Task
‘ s haben einen besseren Weg (wenn möglich ohne Parallel
, weil ich immer noch versuche, ein Verständnis von async-erwarten und Aufgaben)
Wenn der Code funktioniert, dann ist dies besser geeignet für [code review] (https://codereview.stackexchange.com/) Website, was dies zu einer off-top-Frage macht. – Nkosi
'HttpClient' s sind so konzipiert, wiederverwendet werden und relativ langlebig; Erstellen Sie keine neue für jede Anfrage. – sellotape