public abstract SearchResult Search(SearchMessage msg);
public virtual Task <SearchResult> SearchAsync(SearchMessage msg) => Task.FromResult(Search(msg));