Асинхронный вызов нестатических методов из NETCore Windows Service - PullRequest
1 голос
/ 06 июня 2019

Я конвертировал службу Windows в NETCore и следовал простому руководству, чтобы получить ожидаемые результаты, прежде чем закончить его.После того, как это было сделано, я решил, что должен преобразовать статические методы, чтобы я мог легче выполнять модульные тесты, но это привело меня к ситуации, когда я понятия не имею, что происходит.Эта служба Windows предположительно работает на основе таймера, где каждые две секунды она будет вызывать метод из другого проекта для выполнения различных асинхронных вызовов.Хотя была проблема, похоже, что после удаления статического свойства из всех методов я начал получать сообщение об ошибке, заявив, что мне нужна ссылка на объект для нестатического метода.Это то, что я имею до сих пор

        public Task StartAsync(CancellationToken cancellationToken)
    {
        if (timer == null)
        {
            timer = new System.Threading.Timer( (e) => OnElapsedTime(), null,TimeSpan.Zero,TimeSpan.FromSeconds(15) ); 
        }
        return Task.CompletedTask;
    }

    public async void OnElapsedTime()
    {
       await Logic.OnElapsedTime(Client,handler);
    }

Я пытаюсь вызвать метод:

public class Logic
{

    public async Task<object> OnElapsedTime(HttpClient Client, HttpClientHandler handler)
    { (...)

Кажется, я не могу выполнить этот вызов без ошибкиЯ пытался создать экземпляр Logic раньше, и ошибок не будет, пока я не доберусь до издательской части, где это было предложено.Любая помощь в выяснении того, что происходит, и если возможно даже достичь того, что я ищу, не обращаясь к статическим методам?

Это руководство, которое я использовал для настройки моей службы Windows в netCoreкстати: гид

1 Ответ

0 голосов
/ 06 июня 2019

Тем временем я нашел решение своей проблемы, используя вместо этого метод Invoke.Я также реорганизовал метод логики, чтобы в это время не принимать никаких параметров, хотя это было совершенно не связано с проблемой, с которой я столкнулся.

typeof(Logic).GetMethod("OnElapsedTime").Invoke(new Logic(), null)
...