等待一个无效的asynchronous方法
我如何等待一个void async方法来完成它的工作? 
例如,我有一个像这样的function:
 async void LoadBlahBlah() { await blah(); ... } 
现在我想确保一切都已经加载之前,继续在别的地方。
 最好的做法是标记函数async void只有当它是火,忘记方法,如果你想等待,你应该标记为async Task 。 
 如果你仍然想等待,那么就像await Task.Run(() => blah()) 
 如果您可以将您的function的签名更改为async Task则可以使用此处介绍的代码 
 最好的解决scheme是使用async Task 。 你应该避免async void的几个原因,其中之一是可组合性。 
 如果方法不能返回Task (例如,它是一个事件处理程序),那么您可以使用SemaphoreSlim在即将退出时发出方法信号。 考虑在finally一块做这个。 
 你不需要手动做任何事情, await关键字暂停执行直到blah()返回。 
 private async void SomeFunction() { var x = await LoadBlahBlah(); <- Function is paused //do more stuff when LoadBlahBlah() returns } private async Task<T> LoadBlahBlah() { return await blah(); <- function is paused } 
  T是对象的typesblah()返回 
 你不能真的await void函数,所以LoadBlahBlah()不能是void 
做一个AutoResetEvent,调用该函数,然后等待AutoResetEvent,然后将其设置在asynchronous无效,当你知道它已经完成。
你也可以等待从你的asynchronous返回的任务