当我不需要响应时,使用async而不等待

Hus*_*hsh 7 c# async-await

我想从我的应用程序发送短信.当我将get请求发送到特定URL时,SMS将发送.我的所有方法都是异步的,但当我实例化HttpClient并想要使用时response.Content.ReadAsStringAsync(),我删除了await.

我不想等待此方法的响应,并且只想向该URL发送请求.现在你能告诉我这是一个很好的解决方案吗?

这是我的示例代码:

public async Task<bool> SendMessage(string number, string body)
{
    var from = _config["SMSSenderSettings:FromNumber"];
        var username = _config["SMSSenderSettings:PanelUserName"];
        var password = _config["SMSSenderSettings:PanelPassword"];

        using (var client = new HttpClient())
        {
            try
            {
                var response = await client.GetAsync($"{BaseUrl}/send.php?method=sendsms&format=json&from={from}" +
                    $"&to={number}&text={body}&type=0&username={username}&password={password}");
                response.EnsureSuccessStatusCode(); // Throw exception if call is not successful

                response.Content.ReadAsStringAsync();
                return true;
            }
            catch (HttpRequestException)
            {
                return false;
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

我离开awaitresponse.Content.ReadAsStringAsync();,我收到了警告.

Sou*_*osh 5

如果你不想等待你的任务,你可以删除不需要的返回类型

public async Task SendMessage(string number, string body)
{
    var from = _config["SMSSenderSettings:FromNumber"];
    var username = _config["SMSSenderSettings:PanelUserName"];
    var password = _config["SMSSenderSettings:PanelPassword"];

    using (var client = new HttpClient())
    {
        try
        {
            var response = await client.GetAsync($"{BaseUrl}/send.php?method=sendsms&format=json&from={from}" +
                $"&to={number}&text={body}&type=0&username={username}&password={password}");
            response.EnsureSuccessStatusCode(); // Throw exception if call is not successful

            await response.Content.ReadAsStringAsync();
        }
        catch (HttpRequestException)
        {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以SendMessage从另一个方法调用,比如 -

await SendMessage().ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)

注意:不建议这样做,因为您不知道您的任务是否成功完成。

还有其他方法可以实现您想要的。你可能会读到这些——

如何在不需要等待当前函数/线程中的结果的情况下运行异步任务?

如何在不等待的情况下安全地调用 C# 中的异步方法