private async Task<IEnumerable<string>> GetFunctionNamesAsync() {
var functions = TryRestoreFromCache();
if (functions == null || !functions.Any()) {
try {
var result = await _host.Session.EvaluateAsync<JArray>(Invariant($"as.list(getNamespaceExports('{this.Name}'))"), REvaluationKind.BaseEnv);
functions = result
.Select(p => (string)((JValue)p).Value)
.Where(n => n.IndexOf(':') < 0);
result = await _host.Session.EvaluateAsync<JArray>(Invariant($"as.list(ls('package:{this.Name}'))"), REvaluationKind.BaseEnv);
var variables = result
.Select(p => (string)((JValue)p).Value)
.Where(n => n.IndexOf(':') < 0);
functions = functions.Union(variables);
} catch (TaskCanceledException) { } catch (REvaluationException) { }
} else {
_saved = true;
}
return functions ?? Enumerable.Empty<string>();
}