Ich habe einen Windows-Dienst, den ich von einem anderen Entwickler geerbt habe, läuft es sehr langsam und hat zahlreiche langsame Aufruf an die eBay-API. Ich möchte es beschleunigen ohne zu viel Refactoring.Async erwarten, wie die Rückgabewerte
Ich habe gerade angefangen, mit C# async/await zu versuchen, einige dieser langsamen Aufruf async ausführen zu bekommen. Hier ist, was ich versuche zu erreichen:
Ich habe eine 1 sehr beschäftigt Methode, wie unten viele Anrufe macht:
getProducts
getCategories
getVehicles
getImages
Meine Gedanken waren, dass ich einfach die Methoden async
ändern könnte und fügen wie unten Task<T>
zum Rückgabetyp:
public async Task<String> ProcessAdditionalProductDetialsAsync(ItemType oItem)
{
String additionalProductDetails = string.Empty;
if (oItem.ItemSpecifics.Count > 0)
{
foreach (NameValueListType nvl in oItem.ItemSpecifics)
{
if (nvl.Value.Count > 0)
{
foreach (string s in nvl.Value)
{
additionalProductDetails += "<li><strong>" + nvl.Name + ":</strong> " + s + "</li>";
}
}
}
}
return additionalProductDetails;
}
Dann rufen sie mit await:
Task<String> additionalProductDetials = ebayPartNumbers.ProcessAdditionalProductDetialsAsync(item);
Task<PartNumberCollection> partNumberCollection = ebayPartNumbers.ProcessPartNumbersAsync(item);
await Task.WhenAll(partNumberCollection, additionalProductDetials);
Wie bekomme ich die zurückgegebenen Typen, damit ich sie verwenden kann? Ich habe versucht, nur partNumberCollection
zu verwenden, aber es hat nur die await
Eigenschaften zur Verfügung.
Der Compiler sollten Sie ohne eine Warnung über die Verwendung von 'async' werden geben 'erwarten' in' ProcessAdditionalProductDetialsAsync'. Ist das dein tatsächlicher Code oder macht es wirklich eine "erwarten"? Woher kommt die eBay-API? –
Ja, der Compiler warnt, dass diese Methode keine Wartezeit hat, aber die Wartezeit in der Elternmethode ist. –
Sie sollten auf die Compiler-Warnung achten; es sollte ein 'erwarten' * in dieser Methode * geben, wenn es" asynchron "ist. Wenn Sie Code in einem Hintergrund-Thread ausführen möchten, verwenden Sie 'Task.Run'; wenn Sie E/A (d. h., die eBay-API), sollte es natürlich-asynchrone Methoden verwenden. –