等待一个无效的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返回的任务