зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1734700 - Use the IO event queue for IOUtils background tasks, r=KrisWright
Differential Revision: https://phabricator.services.mozilla.com/D128311
This commit is contained in:
Родитель
194424d90e
Коммит
71fbec519e
|
@ -1597,14 +1597,20 @@ template <typename OkT, typename Fn>
|
|||
RefPtr<IOUtils::IOPromise<OkT>> IOUtils::EventQueue::Dispatch(Fn aFunc) {
|
||||
MOZ_RELEASE_ASSERT(mBackgroundEventTarget);
|
||||
|
||||
return InvokeAsync(
|
||||
mBackgroundEventTarget, __func__, [func = std::move(aFunc)]() {
|
||||
Result<OkT, IOError> result = func();
|
||||
if (result.isErr()) {
|
||||
return IOPromise<OkT>::CreateAndReject(result.unwrapErr(), __func__);
|
||||
}
|
||||
return IOPromise<OkT>::CreateAndResolve(result.unwrap(), __func__);
|
||||
});
|
||||
auto promise =
|
||||
MakeRefPtr<typename IOUtils::IOPromise<OkT>::Private>(__func__);
|
||||
mBackgroundEventTarget->Dispatch(
|
||||
NS_NewRunnableFunction("IOUtils::EventQueue::Dispatch",
|
||||
[promise, func = std::move(aFunc)] {
|
||||
Result<OkT, IOError> result = func();
|
||||
if (result.isErr()) {
|
||||
promise->Reject(result.unwrapErr(), __func__);
|
||||
} else {
|
||||
promise->Resolve(result.unwrap(), __func__);
|
||||
}
|
||||
}),
|
||||
NS_DISPATCH_EVENT_MAY_BLOCK);
|
||||
return promise;
|
||||
};
|
||||
|
||||
Result<already_AddRefed<nsIAsyncShutdownClient>, nsresult>
|
||||
|
|
Загрузка…
Ссылка в новой задаче