diff --git a/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.cpp b/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.cpp index 6a9bd90e77d9..10c22a824228 100644 --- a/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.cpp +++ b/packages/cloud_firestore/cloud_firestore/windows/cloud_firestore_plugin.cpp @@ -173,6 +173,15 @@ class PlatformThreadDispatcher { std::queue> tasks_; }; +template +void ReplyOnPlatformThread(std::function)> result, + ErrorOr reply) { + PlatformThreadDispatcher::GetInstance().Post( + [result = std::move(result), reply = std::move(reply)]() mutable { + result(std::move(reply)); + }); +} + struct EventSinkState { std::mutex mutex; std::unique_ptr> events; @@ -1603,11 +1612,14 @@ void CloudFirestorePlugin::QueryGet( if (completed_future.error() == firebase::firestore::kErrorOk) { const firebase::firestore::QuerySnapshot* querySnapshot = completed_future.result(); - result(ParseQuerySnapshot(querySnapshot, - GetServerTimestampBehaviorFromPigeon( - options.server_timestamp_behavior()))); + ReplyOnPlatformThread( + result, + ParseQuerySnapshot(querySnapshot, + GetServerTimestampBehaviorFromPigeon( + options.server_timestamp_behavior()))); } else { - result(CloudFirestorePlugin::ParseError(completed_future)); + ReplyOnPlatformThread( + result, CloudFirestorePlugin::ParseError(completed_future)); } }); }