如何创建 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_data
、pairs
和Fire
方法的定义。请修改您的问题以包含所有必要的信息。
【参考方案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 的依赖? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章