当我执行代码时,如果在WhenAll
之后使用断点逐步检查idList
WhenAll
是否为空,则检查一切正常。
此代码位于非异步方法之内。
好像让它自己运行不会启动任务。
var currentPage = 1;
List<Result> idList = new List<Result>();
var response = this.GetDocuments(currentPage).Result;
//idList.AddRange(response.results);
var tasks = new List<Task>();
for (var i = 0; i < response.meta.page.total_pages; ++i)
{
var t = new Task(() =>
{
response = this.GetDocuments(i+1).Result;
idList.AddRange(response.results);
});
tasks.Add(t);
t.Start();
}
Task.WhenAll(tasks).Wait();
public async Task<ResponseObject> GetDocuments(int currentPage)
{
var result = await httpClient.GetAsync($"api/as/v1/engines/urlname/documents/list?page[current]={currentPage}").ConfigureAwait(false);
if (!result.IsSuccessStatusCode)
{
loggly.Error($"Exception: ScheduledJobBase, IndexPages, failed when getting documents from Swiftype, response: { result }");
return null;
}
return await result.Content.ReadAsAsync<ResponseObject>().ConfigureAwait(false); ;
}
答案 0 :(得分:0)
发生的问题可能是由于集合未同步,可能引发了InvalidAccessException。
答案 1 :(得分:0)
尽管理想的情况是将方法返回类型转换为Task
并返回或等待Task.WhenAll
的结果,但是如果方法必须保持非异步,则调用{{1} },.Wait()
的调用结果如下:
Task.WhenAll