如果 TasksList 中的所有任务都成功完成,我只想设置 AllMethodsCompleted = true。但是当我想知道是否一切都已成功完成时,我收到一条错误消息。我做错了什么?
Error CS0029: Cannot implicitly convert type 'void' to 'System.Threading.Tasks.Task'
public async Task PlayerAccountDetails()
{
var playerCountryData = GetPlayerCountryData();
var playerTagsData = GetPlayerTagsData();
var TasksList = new List<Task> { playerCountryData, playerTagsData };
Task t = await Task.WhenAll(TasksList);
if (t.Status == TaskStatus.RanToCompletion)
AllMethodsCompleted = true;
else
AllMethodsCompleted = false;
}
最佳答案
Task.WhenAll
将返回一个任务,您可以等待所有任务完成,因此您只需要说:
public async Task PlayerAccountDetails()
{
var playerCountryData = GetPlayerCountryData();
var playerTagsData = GetPlayerTagsData();
var TasksList = new List<Task> { playerCountryData, playerTagsData };
await Task.WhenAll(TasksList);
AllMethodsCompleted = true;
}
如果任何任务被取消或抛出异常,则 await Task.WhenAll(TasksList)
行将抛出异常。
如果你想处理其中一项任务的失败,那么你可以这样做:
try
{
await Task.WhenAll(TasksList);
AllMethodsCompleted = true;
}
catch
{
AllMethodsCompleted = false;
}
关于c# - Task.WhenAll 的问题 我如何知道每项任务是否已完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61775369/