小编csh*_*lan的帖子

触发多个异步任务并仅更新最新任务的结果

我一直在修补 Blazor 并遇到了 async/await 问题。我添加了一个搜索输入字段,它触发一个异步操作,当用户开始输入时,该操作将搜索结果返回给用户。问题是异步任务以错误的顺序完成。触发的第一个任务返回并使已完成的后续任务的结果无效。

我提出了一个涉及跟踪任务的解决方案,但这是正确的做法还是我的做法错误?

我目前的解决方案是这样的:

        private List<Task> runningTasks = new List<Task>();

        protected async Task OnSearchTermChanged(ChangeEventArgs e)
        {
            SearchTerm = e.Value.ToString();

            if(SearchTerm.Length >= 3)
            {
                SearchResult = null;
                var task = AdService.SearchUsers(SearchTerm);
                runningTasks.Add(task);
                var result = await task;

                if(task == runningTasks.Last())
                {
                    SearchResult = result;
                }
            }
            else
            {
                SearchResult ??= new List<AdUser>();
                SearchResult.Clear();
            }
        }
Run Code Online (Sandbox Code Playgroud)

c# async-await blazor

1
推荐指数
1
解决办法
86
查看次数

标签 统计

async-await ×1

blazor ×1

c# ×1