C# 在Task.Factory.StartNew中调用非静态方法
每次在类aC# 在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(
中执行Task.Factory.StartNew
时,我需要在另一个类中调用非静态方法\u methodY
。我不想每次都实例化一个新的
classX。有没有一种方法可以让我在调用
Task.Factory.startNewfrom
\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实例之后,您在参数上有了更多的灵活性,但是您失去了静态初始值设定项保证的线程安全性。明白了。谢谢