我有以下方法:
我将成为一个通用方法的调用者,该方法涉及远程API的调用、响应处理,并且不返回任何内容。
我将像这样调用它:
我可以忽略编译器警告吗?
我是否误用了API?
我不能删除A和B方法上的异步运算符,因为HttpClient.GetStringAsync要求使用它。
编辑:
我去了这个链接https://softwareengineering.stackexchange.com/questions/331353/does-omitting-await-keyword-once-in-the-call-stack-break-the-asynchronous-behavi 并找到以下评论:
"当你不等待异步方法时,它相当于调用Task.Run(()=>A())。"
这是真的吗?
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的响应。由于此调用未被等待,因此在完成调用之前,当前方法的执行将继续进行。请考虑将 'await' 操作符应用于调用的结果。
我可以忽略编译器警告吗?
我是否误用了API?
我不能删除A和B方法上的异步运算符,因为HttpClient.GetStringAsync要求使用它。
编辑:
我去了这个链接https://softwareengineering.stackexchange.com/questions/331353/does-omitting-await-keyword-once-in-the-call-stack-break-the-asynchronous-behavi 并找到以下评论:
"当你不等待异步方法时,它相当于调用Task.Run(()=>A())。"
这是真的吗?
await Task.Run(()=>{A();B();});
- Lei Yangresponse
对象做了什么?如果在调用A
和B
后的代码不需要执行A
和B
,那么你的方法就可以。 - Zein MakkiTask.Run(()=>A());
不等价。 - Damien_The_Unbeliever