【发布时间】:2017-03-14 15:59:00
【问题描述】:
我有以下方法:
async Task A()
{
HttpClient client = new HttpClient();
string response = await client.GetStringAsync("http://msdn.microsoft.com");
}
async Task B()
{
HttpClient client = new HttpClient();
string response = await client.GetStringAsync("http://google.com");
}
即调用远程api,处理响应,不返回任何内容。
我将通过一个常用的方法这样调用它:
protected void Page_Load(object sender, EventArgs e)
{
A();
B();
// Do further task after this which is not dependent on response of A or B
}
编译器对 A 和 B 方法给出以下警告:
因为没有等待这个调用,所以执行当前方法 在呼叫完成之前继续。考虑应用“等待” 调用结果的运算符。
我不需要来自 A 或 B 方法的任何响应,所以我想在 A() 和 B() 前面省略“await”关键字,因为我想在 A 和 B 调用之后执行代码已经写了注释“//在此之后执行不依赖于 A 或 B 响应的进一步任务”而不等待 A 或 B 响应。
我可以忽略编译器警告吗?
我是否在滥用 API?
由于 HttpClient.GetStringAsync 需要它,我无法删除 A 和 B 方法上的异步运算符。
编辑:
发现如下评论:
“当您不等待异步方法时,它等效于调用 Task.Run(()=>A())。”
这是真的吗?
【问题讨论】:
-
await Task.Run(()=>{A();B();}); -
你在用
response对象做什么?如果调用A和B之后的代码不需要A和B来完成,那么你的方式很好。 -
为什么在您的线路中需要“等待”?我不希望这两种方法得到任何回应。
-
如果您想要的是一劳永逸,您可以放心地忽略大多数情况下的警告(ASP.NET 除外)。一些库,比如 Microsoft.VisualStudio.Threading,甚至提供了帮助来抑制这些警告:msdn.microsoft.com/en-us/library/…
-
已经有很多“c# fire-and-forget”问题了...请确保edit 发布您的研究结果 - 否则人们可能会认为您甚至没有尝试并否决这个问题。
标签: c# asp.net .net asynchronous async-await