gpt4 book ai didi

c# - 使用 c# QueueUserWorkItem 似乎并没有执行所有的方法

转载 作者:行者123 更新时间:2023-11-30 20:06:54 24 4
gpt4 key购买 nike

下面是我的代码。

class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main thread starts and sleeps");
Student stu = new Student();
ThreadPool.QueueUserWorkItem(stu.Display, 7);
ThreadPool.QueueUserWorkItem(stu.Display, 6);
ThreadPool.QueueUserWorkItem(stu.Display, 5);
Console.WriteLine("Main thread ends");
}

}

public class Student
{
public void Display(object data)
{
Console.WriteLine(data);
}
}

每次运行代码时,我都会得到不同的结果。我指的不是它们的显示顺序。

以下是我的各种结果

Main thread starts and sleeps  
Main thread ends


Main thread starts and sleeps
Main thread ends
7
5
6


Main thread starts and sleeps
Main thread ends
7

那么,为什么我不每次都显示所有三个数字。请帮忙。

最佳答案

那是因为您没有等待任务完成。它们在线程池中排队等待执行,但主线程在全部或部分完成之前退出。

要看到它们全部完成,您需要在 Main 结束之前设置一个同步屏障:

class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main thread starts and sleeps");
Student stu = new Student();
ThreadPool.QueueUserWorkItem(stu.Display, 7);
ThreadPool.QueueUserWorkItem(stu.Display, 6);
ThreadPool.QueueUserWorkItem(stu.Display, 5);

// barrier here
Console.WriteLine("Main thread ends");
}
}

不幸的是,C# 没有内置的 ThreadPool 屏障,因此您需要自己实现一个,或者使用不同的构造,例如 Parallel.Invoke.

关于c# - 使用 c# QueueUserWorkItem 似乎并没有执行所有的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9196987/

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