【发布时间】:2021-03-17 21:49:09
【问题描述】:
您好,我有以下创建任务的代码。然后将其设置为启动。
该任务旨在向ConcurrentBag 列表添加响应。
但是 await 似乎并没有等待所有任务完成。但它们被标记为已完成。列表中只有一项任务。
使用Task.Run时效果很好!
public async void RunT1()
{
DoesNotWork();
}
public async void RunT2()
{
DoesWork();
}
public async void DoesNotWork()
{
ConcurrentBag<string> concurrentBag = new ConcurrentBag<string>();
List<Task> taskList = new List<Task>();
Task task1 = new Task(async () =>
{
var xml = await LongWorkingMethod();
concurrentBag.Add(xml);
});
taskList.Add(task1);
taskList[0].Start();
await Task.WhenAll(taskList);
if (concurrentBag.Count > 0) //concurrentBag is empty,
//even though the task has finished
{
Debug.Print("success");
}
}
public async void DoesWork()
{
ConcurrentBag<string> concurrentBag = new ConcurrentBag<string>();
List<Task> taskList = new List<Task>();
Task task1 = Task.Run(async () =>
{
var xml = await LongWorkingMethod();
concurrentBag.Add(xml);
});
taskList.Add(task1);
await Task.WhenAll(taskList);
if (concurrentBag.Count > 0) //concurrentBag is NOT empty
{
Debug.Print("success");
}
}
【问题讨论】:
标签: c# .net task-parallel-library async-await