触发并忘记异步等待呼叫

时间:2020-01-08 05:54:11

标签: c# async-await

我有以下情况,

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 and Forget调用是一种好习惯吗?

1 个答案:

答案 0 :(得分:2)

这只是一个警告,因此您知道尚未await启用它。您可以使用“丢弃”来表明您不在乎它是否最终运行完成:

_ = SendSMS();

所以,问题是,如果在完成SendSMS()或SendEmail()之前返回UserRegistration()方法,它会引发异常吗?

不。

在Async Await方法中进行Fire和Forget调用是一种好习惯吗?

我不认为。