Вызвать нестатический метод в Task.Factory.StartNew - PullRequest
0 голосов
/ 08 октября 2019

Мне нужно вызывать нестатический метод _methodY в другом классе _classX каждый раз, когда я выполняю Task.Factory.StartNew в классе _classA . I don't want to instantiate a new classX every time. Is there a way where I can use the same instantiated classX whenever I call Task.Factory.startNew from _classA`

Вот код:

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

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

Я не могу изменить classX или _methodY на static. Нужно ли реализовывать синглтон?

1 Ответ

0 голосов
/ 08 октября 2019

Для вызова метода экземпляра требуется экземпляр. Вы можете передать один, создать новый каждый раз или создать синглтон.

Вот пример кода на основе вашего, который создает и использует синглтон. Статическая переменная _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()
        {

        }
    }
}
...