Я думаю, что вы ищете что-то вроде этого.
public async Task OpenExplorer() {
UnityEngine.WSA.Application.InvokeOnUIThread(async() => await OpenFileAsync(), false);
await Task.Run(LoadModelFromFile);
}
Тем не менее, я предлагаю вам прочитать больше об Asyn c и Await, потому что в зависимости от вашей ситуации, выше код может не соответствовать передовым методам и может быть опасным.
Главное, что Asyn c и Await не для многопоточного кода. Asyn c и Await предполагают более эффективное использование одного потока. В коде есть два основных узких места, IO и CPU, и asyn c await хорошо работает с узкими местами IO, поскольку может освободить потоки для работы с другими вещами, пока вы ожидаете операции на диске или ожидаете веб-запроса. (которые не потребляют никаких потоков).
Если вы создаете метод asyn c, но единственное, что вы делаете, чтобы сделать его асин c, это запуск большого количества долго выполняющегося кода на другой поток, это не так полезно, если только поток, который вы освобождаете, не является потоком пользовательского интерфейса, но единственный способ убедиться в этом наверняка, если вы находитесь в потоке пользовательского интерфейса.
Итак, выполняйте только await Task.Run...
вещи из контекста пользовательского интерфейса, когда вам нужно освободить поток пользовательского интерфейса. Везде, только помечайте методы как asyn c, если они связаны только с IO asyn c, как File.ReadAsync
или другие, которые не потребляют никаких дополнительных потоков.