所以,我有一个非常简单的应用程序,但是在测试时,它只是从DoWork()方法写入控制台。我不确定为什么会这样,但是我相当确定这与异步代码有关。有什么想法,为什么只从方法DoWork()编写?
class Program
{
static void Main(string[] args)
{
MainAsync().Wait();
System.Threading.Thread.Sleep(50000);
}
static async Task MainAsync()
{
Console.WriteLine("Hello World!");
for (int i = 0; i < 300; i++)
{
List<Task> myWork = new List<Task>();
myWork.Add(DoWork(i));
if (myWork.Count == 50)
{
await Task.WhenAll(myWork);
Console.WriteLine("before delay");
await Task.Delay(1000);
Console.WriteLine("after delay");
myWork.Clear();
Console.WriteLine("List cleared.");
}
}
}
public static async Task DoWork(int i)
{
await Task.Delay(0);
Console.WriteLine("Run: " + i);
}
}
答案 0 :(得分:3)
您正在为循环的每次迭代创建一个新列表...它将只包含一件事。
声明循环的外部列表。
更改:
for (int i = 0; i < 300; i++)
{
List<Task> myWork = new List<Task>();
收件人:
List<Task> myWork = new List<Task>();
for (int i = 0; i < 300; i++)
{