не может ждать делегата func группы методов - PullRequest
0 голосов
/ 31 мая 2019

У меня есть делегат func, который определяется следующим образом:

   public enum RunEndStatus
    {
        Success
    }
    public class classA
    {
        Func<object, RunEndStatus> ProcessCalibrationRun { get; set; }
    }

Теперь в другом классе, скажем, classB, я делаю что-то вроде этого,

public class ClassB
{
    public void DoSomething()
    {
        ClassA a = new ClassA();
        a.ProcessCalibrationRun = ProcessCalibrationRun;//This is just fine. It won't complain here.
    }
    public RunEndStatus ProcessCalibrationRun(object obj)
    {
        //Here I have some piece of code takes so much time. To replicate it,
        Thread.Sleep(10000);
    }
}

Когда DoSomethingМетод откуда-то вызывается, приложение блокируется на 10 минут. Поэтому я пытаюсь решить мою проблему следующим образом:

 public async Task<RunEndStatus> ProcessCalibrationRun(object obj)
    {
        await Task.Run(() => { Thread.Sleep(10000)});
        return RunEndStatus.Success;
    }

Я изменяю вызов следующим образом.Но он говорит, что не может ждать метода группы.Пожалуйста, помогите, как я могу ждать на этом методе.

 public async void DoSomething()
    {
        ClassA a = new ClassA();
        a.ProcessCalibrationRun = await ProcessCalibrationRun; //Here it complains saying cannot await method group.
    }

1 Ответ

0 голосов
/ 31 мая 2019

Подпись async возвращает Task, поэтому ваш Func также должен будет

public Func<object, Task<RunEndStatus>> ProcessCalibrationRun { get; set; }

То есть вам не понадобится подпись async в вашем DoSomething, которая не должна быть async void в любом случае

public void DoSomething()
{
   vara = new ClassA();
   a.ProcessCalibrationRun = ProcessCalibrationRun;
}

Тогда где-то еще (возможно, в ClassA) вы можете вызвать его

public async Task DoSomethingElse()
{
   await ProcessCalibrationRun(somethignObject);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...