c# - Task.WhenAll 的问题 我如何知道每项任务是否已完成?

标签 c#

如果 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/

相关文章:

c# - MySQL C# 查询问题 - 更新表

c# - 创建没有命名空间声明的 XML 元素

c# - WebApi 方法参数的默认值

c# - 如何在 Windows 窗体中为标签添加边框?

c# - 将项目从列表框中拖放到特定的 Canvas 中并启动方法

c# - 在另一个页面中呈现一个 aspx 页面

c# - 层次结构不会在 View 中更新

c# - ASP.NET C# TagBuilder SetInnerText 在空白处呈现 %20

c# - 如何有效地旋转数组?

c# - 使用 Clipper 库的平行线