Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在任务中用作Func参数的静态或非静态方法<;TResult>;C#中的构造函数?_C#_Task_Task Parallel Library - Fatal编程技术网

在任务中用作Func参数的静态或非静态方法<;TResult>;C#中的构造函数?

在任务中用作Func参数的静态或非静态方法<;TResult>;C#中的构造函数?,c#,task,task-parallel-library,C#,Task,Task Parallel Library,我正在编写一组从基类派生的类。我希望能够运行多个任务线程。任务构造函数中使用的Func()是实例方法还是必须是类静态方法?如果是实例方法,那么可以使用同一个非静态方法启动多个任务吗?由于缺少更好的术语,您似乎将静态和非静态方法与线程安全混为一谈。。。线程安全性可能像一个术语一样不精确,但在当前的上下文中它会起作用。这是一个完全错误的问题,所以忘掉你认为你知道的关于静态成员的所谓近亲繁殖安全性的任何东西 规则是,只要并发调用同一个方法是安全的,那么您所请求的是安全的(+)。什么时候安全?一般来说,

我正在编写一组从基类派生的类。我希望能够运行多个任务线程。任务构造函数中使用的Func()是实例方法还是必须是类静态方法?如果是实例方法,那么可以使用同一个非静态方法启动多个任务吗?

由于缺少更好的术语,您似乎将静态和非静态方法与线程安全混为一谈。。。线程安全性可能像一个术语一样不精确,但在当前的上下文中它会起作用。这是一个完全错误的问题,所以忘掉你认为你知道的关于静态成员的所谓近亲繁殖安全性的任何东西

规则是,只要并发调用同一个方法是安全的,那么您所请求的是安全的(+)。什么时候安全?一般来说,当方法只写或读局部变量时,只读不可变的共享数据,或者实现了某种同步,允许它同时读和/或写共享数据


(+)将安全理解为您的代码将执行预期操作的条件。

是和是。但是请注意,您调用的方法是线程保存。因此,如果我使用ConcurrentQueue之类的方法来获取任务将处理的数据,那么我可以使用静态方法或实例方法?@JNickVA1再次强调,静态或非静态在这里是非因素。另外,使用
ConcurrentQueue
并不能保证任何本质上的安全,这取决于您如何使用它。但是,如果没有任何其他信息,如果您正确地使用它,这并不重要。ConcurrentQueue的线程安全功能是:添加和检索项目。它们可能做的只是在适当的方法中使用lock语句(在同一个互斥对象上)。但除此之外的处理与其他任何处理一样容易受到竞争条件的影响。我选择ConcurrentQueue是因为我所需要的只是检索对其执行操作的项目,而这些操作对任何其他数据都不会产生影响。在这方面,它(ConcurrentQueue)似乎正是我想要的。InBetween说得很对,我对创建任务时用作Func的静态方法和实例方法有点困惑。