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