Более идиоматический c способ записи getTable
будет выглядеть следующим образом:
async Task getTable(Action<IDictionary> callBack)
{
IDictionary result;
try
{
result = await function.CallAsync(data);
}
catch
{
result = null;
}
callback(result);
}
(Действительно ли это хорошая идея - другой вопрос, так как вы жертвуете информацией об ошибках и конвертируете asyn c метод в обратном вызове обычно немного бессмысленен ...)
Но ваш метод GetTable
просто обречен на провал. Вы никогда не сможете вернуть результат вызова asyn c в выходном параметре, потому что внешняя функция уже завершилась до завершения внутреннего вызова. Единственный способ, которым это могло бы сработать, - это если GetTable
выполняет блокирующее ожидание на getTable
, которое затем уничтожает весь смысл использования asyn c в первую очередь.
Единственный реальный ответ заключается в том, что ваш текущий дизайн неправильный, и вам нужно сделать это по-другому. Asyn c полностью вверх - это единственный способ получить go.