C# Timer 检查多线程是不是完成失败
Posted
技术标签:
【中文标题】C# Timer 检查多线程是不是完成失败【英文标题】:C# Timer to check if multithreading is finished failsC# Timer 检查多线程是否完成失败 【发布时间】:2019-02-16 10:14:33 【问题描述】:我使用计时器来检查多线程是否已完成计算。 我有一个用于计算的元素列表和一个添加每个计算元素的列表视图。所以多线程的结果应该是listview元素的数量等于我列表的元素数量。多线程进行计算。
所以我使用了一个计时器,它每 10 秒检查一次列表视图元素的数量是否等于列表元素的数量,如果是,它将发出警报。
这也部分有效,但问题是我收到大约 15 个警报,而不仅仅是一个警报。我也尝试使用这样的块变量:
if(!block)
Alert();
block = true;
但我仍然收到大约 15 个警报。 重要的是,定时器不是(或应该)不是多线程方法的一部分,它将在多线程启动后第一次调用,而不是在多线程方法中。
【问题讨论】:
看看 async/await 我感觉您的问题出在细节上。如果您发布更多代码可能会有所帮助。 如果您能提供minimal reproducible example,那就太好了。 【参考方案1】:如果您没有将计时器用于向用户显示所用时间等目的,请执行此操作。
class Program
static List<byte> bytes = new List<byte>();
static int maxElements = 400_000;
static Random random = new Random();
static int portionSize;
static void Main(string[] args)
GenerateBytes();
portionSize = maxElements / 4;
ParallelLoopResult result = Parallel.For(0, 4, n =>
int portion = n * portionSize;
for (int i = portion; i < portion + portionSize; i++)
bytes[i] = (byte)(bytes[i] * 2);
);
Console.WriteLine();
static void GenerateBytes()
for (int i = 0; i < maxElements; i++)
bytes.Add((byte)random.Next(0, 11));
在我的机器上计算 400,000 个元素非常快,因为我有 4 个内核。希望这会有所帮助!
【讨论】:
以上是关于C# Timer 检查多线程是不是完成失败的主要内容,如果未能解决你的问题,请参考以下文章