gpt4 book ai didi

c# - 等待任务完成

转载 作者:太空狗 更新时间:2023-10-29 22:09:03 27 4
gpt4 key购买 nike

我有 2 个简单的方法,我希望过程在它们完全完成之前不要继续。因此,我使用了 await Task.WaitAll(tasks);但是编译器在这一行中给我错误:

Severity    Code    Description Project File    Line    Suppression State
Error CS1503 Argument 1: cannot convert from '
'System.Collections.Generic.List<System.Threading.Tasks.Task>' to
'System.Threading.Tasks.Task'

为什么我要自己手动转换这个?我认为这将由编译器完成...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

internal class Program
{
public static void Count1()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Count 1 " + i);
Thread.Sleep(100);
}
}

public static void Count2()
{
for (int i = 0; i < 20; i++)
{
Console.WriteLine("Count 2 " + i);
Thread.Sleep(100);
}
}

public static async Task Run()
{
List<Task> tasks = new List<Task>();

Task t1 = Task.Run(()=>Count1());
Task t2 = Task.Run(() => Count2());

tasks.Add(t1);
tasks.Add(t2);

await Task.WaitAll(tasks); //ERROR IS THROWN HERE
}

private static void Main(string[] args)
{
Run();

Console.ReadKey();
}
}

最佳答案

我怀疑你的意思是 WhenAll而不是 WaitAll . WaitAll 是一个阻塞 调用,它会在原始任务完成时同步返回所有结果。你不能等待那个结果,因为它不是任务。

WhenAll 是一个异步 调用,它返回一个任务,该任务在所有原始任务完成时完成。您可以等待。

如果您将 Run 方法的末尾更改为:

await Task.WhenAll(tasks);
Console.WriteLine("All tasks completed");

...您将看到任务完成,然后是完成消息。

关于c# - 等待任务完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45417407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com