//如果用户先请求浏览一个目录,等一下又请求浏览另外的目录,那怎么操作? public Task <IEnumerable <Item> > GetDirChildren(DirItem dir, TaskCompletionSource <ConversationMessage> response = null) { if (dir.Equals(CurrentDir) && _listResult != null) { return(_listResult.Task); //如果已经请求过了,而且两次请求的内容相同,就等待上次返回结果。 } //表示别人请求过。让上一次的请求返回null。 _listResult?.TrySetResult(null); CurrentDir = dir; _listResult = new TaskCompletionSource <IEnumerable <Item> >(); _listResult.SetValueWhenTimeout(TimeSpan.FromSeconds(Consts.DefaultConnectTimeoutSeconds), null); _currentRequest = new BrowseRequestMessage { DirItemId = dir.Id }; //Env.Logger.Log($"Post Message {_currentRequest}", nameof(RemoteBrowser)); var postTask = _conversation.PostMessage(_currentRequest); postTask.ConfigureAwait(false); if (postTask.Result) { return(_listResult.Task); } _listResult.TrySetResult(null); response?.TrySetResult(null); return(_listResult.Task); }