【发布时间】:2013-12-15 17:58:16
【问题描述】:
当异步方法调用是我的异步方法中的最后一次调用时,我不明白是否需要等待语句。例如
public async Task CallAsync(byte[] data)
{
await Call1Async(data);
Call2Async(data);
}
public async Task Call1Async(byte[] data)
{
...
}
public async Task Call2Async(byte[] data)
{
...
}
以上内容可以编译,但会出现警告“考虑将 await 应用于此方法”。但是我认为在方法的最后一次调用中应用 await 会浪费资源。
同时,如果我使用return Call2Async(data); 而不仅仅是Call2Async(data);,警告就会消失。这表明在这种情况下实际上不需要await。
但这仅适用于具有返回值的方法(即Task<T> 而不仅仅是Task)。对于没有返回值的方法,我需要这个。有没有办法对返回值的方法做同样的事情?
即我需要以某种方式将Call2Async 返回的Task 对象返回给CallAsync 的调用者,并且我不能在CallAsync 中明确使用return 语句,因为我的方法没有返回值。当然,我可以将它们全部调整为返回值(例如 true),但这不是一个优雅的解决方案。
附:如果我的方法中有唯一的异步调用,我只是不将“异步”添加到方法签名中,并且它可以工作(不需要“返回”语句)。但是如果该方法包含多个异步调用,我需要有“异步”修饰符才能等待第一次调用“等待 Call1Async(数据)”。添加'async'修饰符使编译器需要'return'将Task对象返回给调用者(这仅适用于具有返回值的方法)。这就是我想要克服的。
【问题讨论】:
标签: c# .net asynchronous