If you didn't need the responses then you could easily do something like this:
public bool Sync()
{
Task.Run(async () => await MyClass.DoSync());
}
That you need the response will mean more complicated code. Without seeing the full code it's hard to provide specific examples but it's generally better to not tie such long running, complicated asynchronous operations to synchronous ones.
Either pass a continuation to the async method to create via a task or have the async method update a bound property of a viewmodel when finished or fire a custom event.
It is important not to perform any potentially long running async operations in the application livecycle event handlers as if these take to long it can lead to the application being forcefully terminated or the app data being left in an inconsistent state.