C# 在Task.Factory.StartNew中调用非静态方法

C# 在Task.Factory.StartNew中调用非静态方法,c#,task,C#,Task,每次在类a中执行Task.Factory.StartNew时,我需要在另一个类中调用非静态方法\u methodY。我不想每次都实例化一个新的classX。有没有一种方法可以让我在调用Task.Factory.startNewfrom\u classA时使用相同的实例化classX` 代码如下: public void _classA { public void method { Task.Factory.StartNew(

每次在类a
中执行
Task.Factory.StartNew
时,我需要在另一个类中调用非静态方法
\u methodY
。我不想每次都实例化一个新的
classX
。有没有一种方法可以让我在调用
Task.Factory.startNew
from
\u classA时使用相同的实例化classX
`

代码如下:

public void _classA
{          
    public void method
    {
       Task.Factory.StartNew(
           () => _classX._methodY(), 
           token1, 
           TaskCreationOptions.LongRunning, 
           TaskScheduler.Default);
    }    
}

public void _classX()
{
     public void _methodY()
     {    
     }
}

我无法将
classX
\u methodY
更改为
静态
。我需要实现单例吗?

调用实例方法需要实例。您可以传入一个,每次创建一个新的,或者创建一个单例

下面是一个基于您的代码示例,它创建并使用单例。静态变量
\u singletonX
在首次使用时被实例化,并将包含
ClassX
的实例

using System.Threading;
using System.Threading.Tasks;

namespace MyWorkspace
{

    public class ClassA
    {
        private static readonly ClassX _singletonX = new ClassX();

        public void MyMethod()
        {
            var token1 = new CancellationToken();

            Task.Factory.StartNew(() => _singletonX.MethodY(), token1, TaskCreationOptions.LongRunning, TaskScheduler.Default);

        }
    }

    public class ClassX
    {
        public void MethodY()
        {

        }
    }
}

使用单例实例并同时使用
Task.Run
Why not Task.StartNew?每次调用
Task时,我都想在一个新线程中运行我的方法。如何实现线程安全的单例?所以我需要使用锁?@Tinyteety,它已经在类中可用。无论有多少线程调用它,初始化代码都保证在第一次访问它时只运行一次。您可以创建一个
静态只读惰性
并使用它,但更好的选择是不使用单例。我可以将参数传递给classx吗?可以,但这很棘手。因为
\u singletonX
是一个静态变量,所以它在创建ClassA实例之前被实例化。您可以传递常量参数或调用静态函数来获取参数值。如果您将ClassX单例的构造延迟到创建ClassA实例之后,您在参数上有了更多的灵活性,但是您失去了静态初始值设定项保证的线程安全性。明白了。谢谢