C#任务。继续处理问题

C#任务。继续处理问题,c#,task,C#,Task,我想使用.NET中的任务框架来安排在不同线程上运行的任务,然后在任务完成后继续在UI线程上更新UI的操作。(我还没怎么玩过,所以我对它不太熟悉。) 代码如下: Task<List<NewsItem>> fetchTask = new Task<List<NewsItem>>(() => { List<NewsItem> items = Rss.FetchNewsItems(feed);

我想使用.NET中的任务框架来安排在不同线程上运行的任务,然后在任务完成后继续在UI线程上更新UI的操作。(我还没怎么玩过,所以我对它不太熟悉。)

代码如下:

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可以轻松解决此问题。是的,我写这篇文章时还没有出来。