我读了很多关于异步/等待,但我仍然缺乏了解以下情况.
我的问题是,应该像DoSomething()或DoSomethingAsync()中一样实现我的“wrapper”方法.
那么什么更好(为什么):我是否使用等待包装方法或直接返回任务?
public static async void Main() { await DoSomething(); await DoSomethingAsync(); } private static Task DoSomething() { return MyLibrary.DoSomethingAsync(); } private static async Task DoSomethingAsync() { await MyLibrary.DoSomethingAsync().ConfigureAwait(false); } public class MyLibrary { public static async Task DoSomethingAsync() { // Here is some I/O } }
解决方法
贝林的答案是好的,但没有明确说明你的问题的具体情况,这是以下例子:
1:直接返回任务
private static Task DoSomething() { return MyLibrary.DoSomethingAsync(); }
2:等待任务并返回结果
private static async Task DoSomethingAsync() { await MyLibrary.DoSomethingAsync().ConfigureAwait(false); }
在这种情况下,直接返回任务和等待任务并返回响应之间的唯一区别是,在后一种情况下 – 必须由框架创建一个状态机,以管理等待该方法的方法的启动,暂停和继续任务.这导致一些性能开销.
一般来说,如果你只需返回一个任务,并让它等待更高一些,你应该.然而,在大多数(但绝对不是全部)的情况下,这是不可能的,因为您将希望在返回之前执行一些处理结果(这正是async / await可以帮助您实现的).