[英]Using delegates to call async methods
我正在調用async
api以獲取詳細信息。 目標api
端點可以更改,並希望將其作為動態函數傳遞。
由於所有API的詳細信息分頁都是相同的,我們如何使它成為具有async return value?
delegate
函數async return value?
private async Task<List<Items>> GetItemsAsync(HttpClient client, string arg1)
{
var totalResults = new List<Items>();
int skip = 0, resultsCount = 1;
while (resultsCount != 0)
{
var results = await GetItems(client, arg1, skip);
if (results != null)
{
totalResults.AddRange(results);
resultsCount = results.Count;
skip += resultsCount;
}
else
{
resultsCount = 0;
}
}
return totalResults;
}
private async Task<List<Users>> GetUsersAsync(HttpClient client, string arg1)
{
var totalResults = new List<Users>();
int skip = 0, resultsCount = 1;
while (resultsCount != 0)
{
var results = await GetUsers(client, arg1, skip);
if (results != null)
{
totalResults.AddRange(results);
resultsCount = results.Count;
skip += resultsCount;
}
else
{
resultsCount = 0;
}
}
return totalResults;
}
類似於以下內容:
private async Task<List<T>> Get<T>(Func<Task<int, int, List<T>>> factory, int skip, int take)
{
var totalResults = new List<T>();
var resultsCount = 1;
while (resultsCount != 0)
{
var results = await factory(skip, take);
if (results != null)
{
totalResults.AddRange(results);
resultsCount = results.Count;
skip += resultsCount;
}
else
{
resultsCount = 0;
}
}
return totalResults;
}
public Task<List<User>> GetUsersAsync(HttpClient httpClient, string arg1)
{
return Get<User>((skip, take) => GetUsers(httpClient, arg1, skip, take), 0, 10);
}
public Task<List<Item>> GetItemsAsync(HttpClient httpClient, string arg1)
{
return Get<Item>((skip, take) => GetItems(httpClient, arg1, skip, take), 10, 10);
}
在某些情況下,以下內容可能就足夠了,但顯然不適用於您的情況,因為似乎您需要對skip參數做更多的事情:
private async Task<List<T>> Get<T>(Func<Task<List<T>>> factory)
{
...
}
public Task<List<User>> GetUsersAsync(HttpClient httpClient, string arg1)
{
return Get<User>(() => GetUsers(httpClient, arg1, 0, 10));
}
public Task<List<Item>> GetItemsAsync(HttpClient httpClient, string arg1)
{
return Get<Item>(() => GetItems(httpClient, arg1, 10, 10));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.