gpt4 book ai didi

C# Task.ContinueWith 问题

转载 作者:太空狗 更新时间:2023-10-29 17:47:17 30 4
gpt4 key购买 nike

我想使用 .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)
{
...
}

无法将类型“System.Threading.Tasks.Task”隐式转换为“System.Threading.Tasks.Task >”。存在显式转换

我认为如果我在任务上使用 List 的通用签名,Task.Result 将返回该类型,以便我可以将它传递给我的方法...我在这里做错了什么?

最佳答案

问题是因为你的 lambda 是一个 Action<Task> , ContinueWith 返回一个 Task ,并且您将其分配给 fetchTask , 类型为 Task<List<NewsItem>> .请注意,您正在分配 ContinueWith 的结果调用变量,而不是 new Task<> 的结果打电话。

如果你这样做:

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);

您会注意到存在问题,因为您的 lambda 返回 void,但任务期望返回 List<NewsItem> .因此,您可能想要从 UpdateNewsItems 返回它,或者创建任务并稍后添加延续。

关于C# Task.ContinueWith 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4044037/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com