无法隐式转换类型';bool';到';System.Threading.Tasks.Task';
本文关键字:System Threading Tasks Task bool 转换 类型 | 更新日期: 2023-09-27 17:57:26
此方法是从wpf主线程调用的。引发-无法将类型"bool"隐式转换为"System.Threading.Tasks.Task"错误。我做错了什么?DocCollection的类型为ObservableCollection。
Task TaskProcesQueue(SynchronizationContext _SyncContext)
{
return Task.Run(() =>
{
if (DocCollection != null)
{
foreach (var item in DocCollection.ToList())
{
ProcessCurrentDocument(item);
var t = Task.Run(() => DocCollection.Remove(item), _SyncContext));
}
}
});
}
Task.Run
没有接受SynchronizationContext
的过载。因此,当过载决议生效时,它无法找到合适的过载。如果删除同步上下文,它将编译:
var t = Task.Run(() => DocCollection.Remove(item));
注意,我建议您不要使用专用的线程池线程从集合中删除项目。这似乎是多余的。相反,让线程池线程已经专门用于删除其作业中的项目:
while (DocCollection.Count > 0)
{
ProcessCurrentDocument(item);
DocCollection.Remove(item);
}
编辑:
如果你想在SynchronizationContext
:上发帖
_SyncContext.Post(_ => { DocCollection.Remove(item) }, null);
现在您的代码处于同步状态,您的问题是DocCollection.Remove(item)
实际上返回了true/false,这是一个指示移除是否成功的布尔方法。
如果您要删除整行,那么所有内容都会很好地工作,并且项目会被处理(但不会被删除)。
我认为您想要的是实际使用运行任务的Result(注意它会阻塞)。
查看MSDN上的官方页面了解更多信息。