У меня есть класс, наследующий я, и у меня нет доступа к базовому классу. Я переопределяю метод этого базового класса, и этот метод не является асинхронным, но мне нужно, чтобы он вызывал метод async, который я создал. Как так:вызов метода async внутри метода non-async
public class OverridingClass : BaseClass
{
public override bool TestMethod()
{
var res = engine.DoAsyncFunction().Result;
//do stuff with res value
}
}
это лучше использовать этот метод, когда я вынимаю значение «результат», или я должен добавить новый, синхронный метод двигателя, а и игнорировать его функции асинхронной полностью, как и ?
public class OverridingClass : BaseClass
{
public override bool TestMethod()
{
var res = engine.DoFunction();
//do stuff with res value
}
}
или есть что-то еще, что я могу сделать полностью для переопределенной функции, чтобы сделать ее асинхронной? Если я пытаюсь сделать перекрытый метод:
public async override Task<bool> TestMethod()...
тогда я получаю ошибку компиляции говорит, что метод не соответствует базовой подписи.
вы хотите, чтобы она вызывалась синхронизации на UI потоке или называется асинхронной? –
Лично я бы предпочел, чтобы последний подход. Если это не «асинхронный путь вниз», тогда есть проблемы. И даже обойти это и ожидание результата задачи только в конечном итоге сделает его синхронным в любом случае, так что это может быть просто и явно синхронно. – David
@Phil: Я описываю [несколько различных подходов к этой проблеме с плюсами и минусами каждого) (https://msdn.microsoft.com/en-us/magazine/mt238404.aspx) в статье MSDN. –