c# - 当我不需要响应时使用不等待的异步

标签 c# async-await

我想从我的应用程序发送短信。当我向特定 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;
            }
        }
}

我从 response.Content.ReadAsStringAsync(); 中删除了 await,然后收到警告。

最佳答案

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

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)
        {

        }
    }
}

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

await SendMessage().ConfigureAwait(false);

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

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

How to run async task without need to await for result in current function/thread?

How to safely call an async method in C# without await

关于c# - 当我不需要响应时使用不等待的异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46021610/

相关文章:

c# - .net DateTime 序列化反序列化 bug

.net - 使用异步 CTP 封装同步方法不起作用

typescript - 针对 ES5 的异步函数

firebase - 初始化对象以显示在我的脚手架中

c# - ASP.NET MVC - 如何安全地保留用户的密码以进行 SQL Server 身份验证?

c# - Msbuild 使用唯一文件名复制和展平

c# - MVC 对 ViewPage 本身强类型化

c# - Visual Studio 2013 Rdlc - 如何显示导航属性中的值

javascript - 如何使用支持 IE11 的 babel 启用 async/await

asp.net-core - .net core HttpContext null inside async Task.Run