Огонь и забудь Асин c Жду звонка - PullRequest
1 голос
/ 08 января 2020

У меня есть следующий сценарий,

public class User
{
    public static async Task<bool> UserRegistration()
    {
        // So Many Async Async Await Methods 
        bool IsRegistrationSuccess = await RegisterUser();

        if(IsRegistrationSuccess)
        {
            await SendSMS();    // Fire And Forget
            await SendEmail();  // Fire And Forget
            return true;
        }
        return false;
    }

    private static async Task SendSMS()
    {
        string URL = "http://www.example.com/dsad";
        using (HttpClient client = new HttpClient())
        {
            HttpResponseMessage response = await client.GetAsync(URL);
        }
    }

    private static async Task SendEmail()
    {
        string emailMessage = "Some Email";
        await EmailService.Send(emailMessage);
    }
}

Я хочу позвонить SendSMS(); и SendEmail(); без ожидания. Не хочу ждать результата. Если я сделаю так, то выдаст предупреждение,

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

Итак, вопрос в том, возвращает ли метод UserRegistration() до завершения SendSMS() ИЛИ SendEmail(), вызывает ли это исключение? И является ли хорошей практикой делать вызовы Fire и Forget в Asyn c Await Methods?

1 Ответ

2 голосов
/ 08 января 2020

Это просто предупреждение, так что вы знаете, что оно не было await включено. Вы можете использовать discard, чтобы дать понять, что вам все равно, завершится ли он до конца:

_ = SendSMS();

Итак, вопрос в том, вернется ли метод UserRegistration () до завершения SendSMS () ИЛИ SendEmail (), запускает ли исключение?

Нет.

И является ли хорошей практикой делать вызовы Fire и Forget в Asyn c Ожидают методы?

Не по моему мнению.

...