i have stack<query>
query
following:
public class query { private readonly ienumerable<string> _distinguishednames; private readonly string _searchtext; private cancellationtokensource _cancellationtokensource; public query( querytype querytype, scope scope = null, ienumerable<string> distinguishednames = null, string searchtext = null) { querytype = querytype; scope = scope; _distinguishednames = distinguishednames; _searchtext = searchtext; } private cancellationtoken cancellationtoken => _cancellationtokensource.token; public scope scope { get; } public ienumerable<expandoobject> data { get; private set; } public querytype querytype { get; } public void cancel() { _cancellationtokensource?.cancel(); } public void disposedata() { data = null; } public async task execute() { _cancellationtokensource = new cancellationtokensource(); var task = task.run(() => { data = new searcher( querytype, scope, _distinguishednames, cancellationtoken, _searchtext).getdata(); }, _cancellationtokensource.token); await task; } public override string tostring() { return querytype.tostring(); } }
the class managing queries contains following relevant portions:
stack<query> queries = new stack<query>(); private async void executerunpreviousquery() { queries.pop(); await runquery(queries.pop()); } private async task runquery( querytype querytype, scope scope = null, ienumerable<string> selecteditemdistinguishednames = null, string searchtext = null) { await runquery( new query( querytype, scope, selecteditemdistinguishednames, searchtext)); } private async task runquery(query query) { starttask(); try { queries.push(query); await queries.peek().execute(); data = queries.peek().data.todatatable().asdataview(); contextmenuitems = generatecontextmenuitems(); } catch (nullreferenceexception e) { showmessage(e.message); resetquery(); } catch (operationcanceledexception) { showmessage("operation cancelled."); resetquery(); } catch (argumentnullexception) { showmessage( "no results of desired type found in selected context."); resetquery(); } catch (outofmemoryexception) { showmessage("the selected query large run."); resetquery(); } finishtask(); }
i can run query fine, if try run previous query method, query has _distinguishednames
field set empty, if field had content. not null, somehow empty. searcher
class _distinguishednames
passed not manipulate it; searcher iterates on it. tried passing copy of _distinguishednames
ensure searcher not somehow messing it, , did not change anything.
to clarify, call runquery
parameters of querytype
, non-empty ienumerable<string>
. executes without problem. call runquery
again other parameters, , executes again without problem. call executerunpreviousquery
, first query fails run because ienumerable<string>
supposed stored in _distinguishednames
empty.
if want see other code, please let me know. best of knowledge, mcve.
Comments
Post a Comment