C#任务。继续处理问题
我想使用.NET中的任务框架来安排在不同线程上运行的任务,然后在任务完成后继续在UI线程上更新UI的操作。(我还没怎么玩过,所以我对它不太熟悉。) 代码如下:C#任务。继续处理问题,c#,task,C#,Task,我想使用.NET中的任务框架来安排在不同线程上运行的任务,然后在任务完成后继续在UI线程上更新UI的操作。(我还没怎么玩过,所以我对它不太熟悉。) 代码如下: Task<List<NewsItem>> fetchTask = new Task<List<NewsItem>>(() => { List<NewsItem> items = Rss.FetchNewsItems(feed);
Task<List<NewsItem>> fetchTask = new Task<List<NewsItem>>(() =>
{
List<NewsItem> items = Rss.FetchNewsItems(feed);
return items;
}).ContinueWith(x => UpdateNewsItems(x.Result),CancellationToken.None,TaskContinuationOptions.None,scheduler);
private void UpdateNewsItems(List<NewsItem> items)
{
...
}
Task fetchTask=新任务(()=>
{
List items=Rss.FetchNewsItems(提要);
退货项目;
}).ContinueWith(x=>UpdateNewItems(x.Result)、CancellationToken.None、TaskContinuationOptions.None、scheduler);
私有void updateNewItems(列表项)
{
...
}
无法将类型“System.Threading.Tasks.Task”隐式转换为“System.Threading.Tasks.Task”。存在显式转换
我认为如果我在任务上使用List的泛型签名,task.Result将返回该类型,以便我可以将其传递给我的方法。。。
我在这里做错了什么?问题是,由于lambda是一个
操作
,ContinueWith返回一个任务
,而您正在将该任务分配给获取任务
,类型为任务
。请注意,您正在将ContinueWith
调用的结果分配给变量,而不是新任务的结果
如果您这样做:
var fetchTask =
new Task<List<NewsItem>>(() =>
{
List<NewsItem> items = Rss.FetchNewsItems(feed);
return items;
})
.ContinueWith<List<NewsItem>>(
x => UpdateNewsItems(x.Result),
CancellationToken.None,
TaskContinuationOptions.None,scheduler);
var fetchTask=
新任务(()=>
{
List items=Rss.FetchNewsItems(提要);
退货项目;
})
.继续(
x=>UpdateNewsItems(x.Result),
取消令牌。无,
TaskContinuationOptions。无,计划程序);
您会注意到有一个问题,因为lambda返回void,但任务要求返回List
。因此,您可能希望从UpdateNewItems返回该任务,或者创建任务并在以后添加延续。async/await可以轻松解决此问题。是的,我写这篇文章时还没有出来。