繁体   English   中英

触发并忘记异步等待调用

[英]Fire and Forget Async Await Call

我有以下场景,

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()完成之前返回,它是否会触发异常? 在 Async Await 方法中进行 Fire and Forget 调用是一种好习惯吗?

这只是一个警告,所以你知道它没有被await 您可以使用丢弃来明确表示您不关心它是否最终运行完成:

_ = SendSMS();

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

不。

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

在我看来不是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM