c# – 在Task.WhenAll中完成任务时是否有回调
发布时间:2020-12-15 08:37:04 所属栏目:百科 来源:网络整理
导读:假设我有以下内容: IEnumerableTaskTimeSpan tasks = //...TimeSpan[] results = await Task.WhenAll(tasks);// Handle results 当我能够处理结果时,所有任务必须完成. 有没有办法按需处理每个结果? 就像注册任务完成时将执行的委托/回调一样: IEnumerabl
假设我有以下内容:
IEnumerable<Task<TimeSpan>> tasks = //... TimeSpan[] results = await Task.WhenAll(tasks); // Handle results 当我能够处理结果时,所有任务必须完成. 有没有办法按需处理每个结果? 就像注册任务完成时将执行的委托/回调一样: IEnumerable<Task<TimeSpan>> tasks = //... await Task.WhenAll(tasks,result => { // A task has finished. This will get executed. // result is of type TimeSpan }); 解决方法
是的,您使用WhenAny而不是WhenAll …或者在每个任务上调用ContinueWith. 例如,对于WhenAny方法: ISet<Task<TimeSpan>> tasks = new HashSet<Task<TimeSpan>>(...); while (tasks.Count != 0) { var task = await Task.WhenAny(tasks); // Use task here tasks.Remove(task); } 您可以使用另一个选项,将原始任务序列转换为按顺序完成的一系列任务,但给出相同的结果.详细信息在this blog post,但结果是您可以使用: foreach (var task in tasks.InCompletionOrder()) { var result = await task; // Use the result } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |