Как вырваться из асинхронной задачи - PullRequest
0 голосов
/ 09 сентября 2018

В настоящее время я пишу небольшой проект для разногласий и использую асинхронную функциональность. Но у меня возникли небольшие проблемы с пониманием того, как эффективно избежать моих методов.

Скажите, у меня есть этот метод:

public async Task DoSomething(Item a, Person b)
{
   if(b is NPC)
   {
     await DoFunction()
   }

   // Code to Handle Everything else
}

Мой вопрос: как мне эффективно покинуть метод после первого ожидания? Мне сказали, что это плохая практика - использовать возвраты в асинхронных задачах. Это так же просто, как использовать эффективные Ifs и Elses, а не единичные ifs? Это то, что озадачивает меня.

Ответы [ 3 ]

0 голосов
/ 09 сентября 2018

Возврат чего? Возврат DoSomething () или возврат DoFunction ()? Поскольку DoSomething () является «асинхронной задачей», у вас нет выбора - вы не можете вернуть любое значение. Другими словами, это не плохая практика, она даже не будет компилироваться. Если вы удалите «async», то DoSomething () должен будет вернуть Task, и тогда, очевидно, он не сможет вызвать «await». Имейте в виду, что «async» изменяет синтаксис возвращаемого значения метода

0 голосов
/ 02 октября 2018

Я бы попробовал это:

        if (b is NPC)
        {
            await Task.Run(() =>
            {
                return DoFunction();
            });
        }
0 голосов
/ 09 сентября 2018

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

...