我应该在Tasks内部还是外部创建对象?

时间:2012-10-20 15:27:37

标签: c# asp.net task-parallel-library

假设我有一个对象,其成员我想在两个单独的任务中使用。什么是最好的方法?由于结构通过值传递,我应该将对象更改为结构,然后创建对象的两个单独副本,并将其传递给两个任务?此外,由于对象的属性来自数据库,我想我可以在每个任务中创建实例。

哪种方法最有效?

2 个答案:

答案 0 :(得分:3)

正如Henk在关于OP的评论中暗示的那样......

如果对象的属性仅用于参考,那么将对象实例化一次并将其传递给多个任务没有问题,但是,如果任务将要更改对象的属性,则需要处理所有常见的多线程问题。

另外,既然你提到这些对象代表Db记录,我猜你是从ORM中获取它们的。如果您正在使用实体框架,那么在更改属性时,它创建的代理类肯定是线程安全。

所以真的,这取决于你的使用情况我很想在每个任务中完成所有工作,所以任务是一个独立的单元,后来由不了解这个限制的开发人员所做的工作的改变不会导致意外的竞争条件。 (假设您没有处理大量实体并且不考虑内存使用情况)

答案 1 :(得分:0)

如果对象在任务之间是独立的,那么它应该是值。如果两个任务正在使用一个对象,则应该有一个对象。如果对象是独立的,则克隆对象然后传递给任务(换句话说,2个对象)。我不会使用结构。