当我运行代码时,List <tasks>不执行任何操作,但是如果我逐步执行,它会起作用

时间:2019-05-30 12:05:07

标签: c# .net asynchronous task

当我执行代码时,如果在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); ;
        }

2 个答案:

答案 0 :(得分:0)

发生的问题可能是由于集合未同步,可能引发了InvalidAccessException。

答案 1 :(得分:0)

尽管理想的情况是将方法返回类型转换为Task并返回或等待Task.WhenAll的结果,但是如果方法必须保持非异步,则调用{{1} },.Wait()的调用结果如下:

Task.WhenAll