【发布时间】:2021-10-11 14:10:37
【问题描述】:
假设我有一些看起来像这样的东西(示例代码):
public int val = 0;
public Task[] Tasks = new Task[3];
private void Run()
{
for (int i = 0; i <= Tasks.Count(); i++)
{
Tasks[i] = Task.Run(() =>
{
changeValue(val);
});
}
foreach (var task in Tasks)
{
try
{
task.Wait();
}
catch { }
}
}
public static void changeValue(int value)
{
for (int i = 0; i <= 100; i++)
{
value++;
MessageBox.Show(value.ToString());
}
}
在我的例子中,这个值的上限为 100,因为每个任务都在独立更改它,但我希望它的上限为 300,因为有 3 个任务(对于本示例),我希望它们一起更改值。
有谁知道什么可以帮助我解决这个问题?我尝试过public volatile int val,并尝试创建一个更改值的锁定方法,但没有任何效果。
【问题讨论】:
-
lock 语句或 Interlocked 静态类应该有帮助
-
例如Monitor。
-
@Serg 感谢您的回答,事实证明这正是我所需要的,如下面的回答所示
-
请永远不要再像这样给
catch { }编码。
标签: c# multithreading task