如何创建 x 数量的任务,例如 list.Count 的依赖? [关闭]

Posted

技术标签:

【中文标题】如何创建 x 数量的任务,例如 list.Count 的依赖? [关闭]【英文标题】:How do I create x amount of Tasks which is dependence of for example the list.Count? [closed] 【发布时间】:2021-07-02 10:56:23 【问题描述】:

这只是我代码的一个测试部分:

var task1 = Task.Run(() =>
            
                guns_data[0].Fire(pairs[0, 0], pairs[0, 1]);
            ); 
var task2 = Task.Run(() =>
        
            guns_data[1].Fire(pairs[0, 1], pairs[0, 0]);
        ); 
(pairs) 是一个二维数组,包含我的“玩家”数据(姓名、生命值、盔甲...) (guns_data) 是一个列表,包含我的枪支值,.fire 是一种射击方法
    我想创建 x amout of this task1,task2....taskx。 之后我必须等待所有这些任务。

我知道这不是正确的索引,因为它只是一个测试部分。 我是一名初级程序员


你能帮我举个例子吗?

【问题讨论】:

你想解决什么问题?为什么要将每个Fire 方法调用作为单独的Task 运行? 他们是不同的人,他们必须同时射击对方。这就像一个免费的射击游戏 底层数据结构是线程安全的吗?从多个线程修改相同的资源需要格外小心和协调。 你的名字很匈牙利语,你会说匈牙利语吗?否则我只是跳入此任务并尝试了解它是如何工作的,但我知道它是如何工作的我只是这方面的初学者,我不知道它是否线程安全。 是的,我是匈牙利人,但我不知道这与您的问题有何关系。为了能够帮助您确定数据结构(及其操作)是否是线程安全的,请分享使用guns_datapairsFire 方法的定义。请修改您的问题以包含所有必要的信息。 【参考方案1】:

你需要做这样的事情:

Task[] tasks =
    guns_data
        .Select(gd => Task.Run(() => gd.Fire(pairs[0, 0], pairs[0, 1])))
        .ToArray();
        
Task.WaitAll(tasks);

我不知道如何正确获取 pairs 的索引,因为您没有在问题中指定。不过这应该会有所帮助。

【讨论】:

我尝试过并且可以工作,但不是我想要的那样。如果我运行这个 gd.Fire() 不使用 Thread.Sleep(value) 方法 int 它的块。例如: Thread.Sleep(Sepeed_fire);如果我使用 Task.Factory 可能会起作用? @user14554081 - 你真的需要展示你所有的代码。告诉我原始问题中没有的不起作用的地方并不好。

以上是关于如何创建 x 数量的任务,例如 list.Count 的依赖? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL - 如何在N个月内传播X数量

spark如何确定任务数量?

根据用户偏好创建通知系统

如何显示一定数量的小数位数

如何使火花同时运行作业中的所有任务?

如果您输入了日期和一些要添加的 x 秒,如何找出闰年的数量