我想从我的应用发送短信。当我将get请求发送到特定URL时,SMS将发送。我的所有方法都是异步的,但当我实例response.Content.ReadAsStringAsync()
并希望使用await
时,我删除了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;
}
}
}
。
我不想等待此方法的响应,并且只想向该网址发送请求。现在你能告诉我这是一个很好的解决方案吗?
这是我的示例代码:
await
我从response.Content.ReadAsStringAsync();
删除了{{1}},然后收到警告。
答案 0 :(得分:4)
如果您不想等待任务,可以删除不需要的返回类型
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?
答案 1 :(得分:3)
这不是一个好主意,在您的代码中的某个位置{/ 1}} / await
/ Wait
.Result
否则任何未处理的异常都会升级到应用程序级别见docs
那是警告的氡,编译器不想让你在脚下射击。如果你真的想继续这样做,只需将任务放在变量中,永远不要使用它,尽管其他静态分析工具可能会标记这一点。
Task
或者如果完成请求不需要调用,您可以考虑完全删除它。
答案 2 :(得分:0)
如果不需要响应内容,请不要阅读内容。当你可以避免它时,你不应该抛出异常。
通过它,您可以拥有更清晰的代码
A[_<:S]