Başka bir geliştiriciden miras aldığım bir windows hizmetim var, çok yavaş çalışıyor ve eBay API'sine çok sayıda yavaş çağrı var. Çok fazla refactoring yapmadan hızlandırmak istiyorum.Async dönüş değerlerinin nasıl kullanılacağını bekliyor
Bu yavaş çağrıdan bazılarını eşzamansız çalıştırmaya çalışmak için C# async/await kullanmaya bakmaya başladım.
Ben aşağıda aramaları çok kılan bir 1 çok yoğun bir yöntem var: İşte ben başarmak için çalışıyorum ne
getProducts
getCategories
getVehicles
getImages
Düşüncelerim ben sadece async
için yöntemlerini değiştirmek ve katkı sağlayabileceğini edildi
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;
}
Sonra bekliyor onları çağırır:
Task<String> additionalProductDetials = ebayPartNumbers.ProcessAdditionalProductDetialsAsync(item);
Task<PartNumberCollection> partNumberCollection = ebayPartNumbers.ProcessPartNumbersAsync(item);
await Task.WhenAll(partNumberCollection, additionalProductDetials);
aşağıda dönüş tipine
İade edilen türleri nasıl alabilirim, böylece bunları kullanabilirim? Sadece partNumberCollection
kullanmayı denedim, ancak yalnızca await
özelliklerine sahip. Görev sınıfına
"ProcessAdditionalProductDetialsAsync" içinde "bekliyor". Bu senin gerçek kodun mu yoksa gerçekten "bekle" mi yapıyor? EBay API'si nereden geliyor? –
Evet, derleyici bu yöntemin beklemediğini, ancak beklemenin ana yöntemde olduğunu uyarır. –
Derleyici uyarısına dikkat etmelisiniz; Bu yöntemde bir “bekle” * olması gerekir * eğer bu bir “uyumsuz” ise. Arka plan iş parçacığı üzerinde kod yürütmek istiyorsanız, 'Task.Run' kullanın; eğer G/Ç yapmak isterseniz (ör., eBay API'sı), doğal olarak eşzamansız yöntemleri kullanmalıdır. –