我有一个Windows服务,这个服务是由另一个开发人员继承而来的,运行非常缓慢,并且有许多对eBay API的调用速度很慢。我希望能够加快它的速度,而不需要进行太多的重构。
我刚刚开始尝试使用C#异步/等待来尝试使一些这些缓慢的调用变成异步调用。我想要实现以下内容:
我有一个非常繁忙的方法,会进行许多如下的调用:
getProducts
getCategories
getVehicles
getImages
我的想法是可以将方法简单改为async
,并在返回类型中添加Task<T>
如下:
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;
}
然后使用await调用它们:
Task<String> additionalProductDetials = ebayPartNumbers.ProcessAdditionalProductDetialsAsync(item);
Task<PartNumberCollection> partNumberCollection = ebayPartNumbers.ProcessPartNumbersAsync(item);
await Task.WhenAll(partNumberCollection, additionalProductDetials);
我怎样才能获取返回类型并使用它们?我已经尝试直接使用
partNumberCollection
,但只有await
属性可用。
ProcessAdditionalProductDetialsAsync
中使用了async
但没有使用await
。这是你的实际代码吗?还是它真的在执行await
操作?eBay API在哪里被调用? - Stephen Clearyawait
。如果你想在后台线程上执行代码,请使用Task.Run
;如果你想进行 I/O 操作(例如 eBay API),则应该使用自然异步的方法。 - Stephen Cleary