异步:在asp.net webapi中返回任务或先等待
您好,我有一个关于webapi上的async/await的小问题。这两种用法之间有区别吗?哪一种被认为是正确的?阅读后,我想变体1更好,因为开销更小,但我需要确定,因此我再次询问;) 备选案文1:异步:在asp.net webapi中返回任务或先等待,asp.net,asynchronous,asp.net-web-api,Asp.net,Asynchronous,Asp.net Web Api,您好,我有一个关于webapi上的async/await的小问题。这两种用法之间有区别吗?哪一种被认为是正确的?阅读后,我想变体1更好,因为开销更小,但我需要确定,因此我再次询问;) 备选案文1: public Task<string> Get(){ return Bar(); } 公共任务Get(){ 返回杆(); } 备选案文2: public async Task<string> Get(){ return await Bar(); } 公共异
public Task<string> Get(){
return Bar();
}
公共任务Get(){
返回杆();
}
备选案文2:
public async Task<string> Get(){
return await Bar();
}
公共异步任务Get(){
返回等待条();
}
方法:
public async Task<string> Foo(){
await Task.Delay(5000);
return "Done";
}
public Task Bar(){
return Foo();
}
公共异步任务Foo(){
等待任务。延迟(5000);
返回“完成”;
}
公共任务条(){
返回Foo();
}
感谢您的提示变体2不可能,因为您无法执行
public async Task<string> Get(){
return await Bar();
}
public Task Bar(){
return Foo();
}
公共异步任务Get(){
返回等待条();
}
公共任务条(){
返回Foo();
}
wait
仅适用于async
且任务栏()
不是async
。。。这只是任务
看
上面说
正确的处理方法是等待方法,并使
调用方法异步任务。这将有一个
异步向上遍历代码时的级联效果
话虽如此,您只剩下变体1。对于大多数情况,这是一个很好的选择。如果您觉得AsyncWait会对性能产生负面影响,那么可能是将错误的方法设置为async。但是,你需要再次校准它。对于这个问题,不可能有一个通用的答案来解决所有的方法
另见:
谢谢你的回答!我应该在问之前测试一下。但是现在我有一个问题:这些变量之间有区别吗:异步任务Get(){return await Foo();}或任务Get(){return Foo();}?是的。异步增加了性能开销。但是为什么要使用没有异步的任务呢?好的,很好。这不是生产代码,我只是想了解它是如何工作的。非常感谢。如果您对top方法使用了async,那么在所有后续子方法中使用它是安全的,因为async侦听将保持不变。确定。对于asp.net WebAPI,如果我将一个方法声明为“async Task Get()”并在Get中等待TaskX,或者如果我将其声明为“Task Get()”并直接返回TaskX,则没有区别,对吗?