并行任务无法正常工作 [英] Parallel Task Not working properly

查看:61
本文介绍了并行任务无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我运行此代码并且Parallel == true时,所有任务都会访问一个任务的属性,因为它们是静态的,因此运行的所有任务都将访问相同的proberties并且程序将崩溃。



When I run this code and Parallel == true all tasks access the properties of one task as they are static, so all the tasks that run will access the same proberties and the program will crash.

private List<BackupTask> backupTasks = new List<BackupTask>();

public void RunBackup()
        {
            if (Parallel == false)
            {
                foreach (var item in backupTasks)
                {
                    item.RunBackup();
                }
            }
            else
            {
                List<Task> tasks = new List<Task>();
                foreach (var item in backupTasks)
                {
                    var t = Task.Factory.StartNew(() =>
                    {
                        item.RunBackup();
                    });
                    tasks.Add(t);
                }
                Task.WaitAll(tasks.ToArray());
            }
        }

推荐答案

使用 lock statement [ ^ ] - 链接包含示例。
Use the lock statement[^] - the link includes examples.


public void RunBackup()
        {
            if (Parallel == false)
            {
                foreach (var item in backupTasks)
                {
                    item.RunBackup();
                }
            }
            else
            {
                //List<Task> tasks = new List<Task>();
                //foreach (var item in backupTasks)
                //{
                //    var t = Task.Factory.StartNew(() =>
                //    {
                //        item.RunBackup();
                //    });
                //    tasks.Add(t);
                //}
                //Task.WaitAll(tasks.ToArray());
                var tasks = new Task[backupTasks.Count];
                for (var i = 0; i < backupTasks.Count; i++)
                {
                    var x = i;
                    tasks[i] = Task.Factory.StartNew(() => backupTasks[x].RunBackup());
                }
                Task.WaitAll(tasks);
            }
        }


这篇关于并行任务无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆