gpt4 book ai didi

C# - 异步方法从 ContinueWith 返回数据

转载 作者:太空宇宙 更新时间:2023-11-03 19:10:41 25 4
gpt4 key购买 nike

我有一个 Windows Phone 应用程序,它从 RSS Feed 获取数据并缓存以前的文章。

public class MainViewModel : BaseViewModel
{
private ObservableCollection<Article> _articles;
}

在我的 View 模型中,我希望能够通过异步方法加载缓存数据,并通过另一种异步方法 ContinueWith 加载在线数据,以便应用程序可以在加载 Web 内容时快速显示数据。我的代码目前看起来像这样:

Task.Factory.StartNew(() => _model.LoadDataAsync())
.ContinueWith(antecendent => _model.RefreshDataAsync())
.Wait();

其中 LoadDataAsyncRefreshDataAsync 方法返回 List

public async Task<List<Article>> LoadDataAsync() { ... }
public async Task<List<Article>> RefreshDataAsync() { ... }

但是,当我尝试将该结果分配给我的文章时:

_articles = await Task.Factory.StartNew(() => _modelArticles.LoadDataAsync())
.ContinueWith(antecendent => _modelArticles.RefreshDataAsync())
.Wait();

它告诉我,我“不能等待无效”。那么我可以对我的代码做些什么,让它首先给我 LoadDataAsync 列表,并在它完成后添加 RefreshDataAsync 列表?

对于那些熟悉它的人,我希望模仿 WPCentral 的行为应用程序,显示缓存的文章,然后淡出并显示新文章。

最佳答案

错误消息是因为您的代码正在await处理Wait的结果,即void(而不是await能够)。您应该删除对 Wait 的调用。

更多提示:

你可以先试试这个:

_articles = await Task.Run(() => _modelArticles.LoadDataAsync());
_articles = await Task.Run(() => _modelArticles.RefreshDataAsync());

但我不相信 Task.Run 是必要的:

_articles = await _modelArticles.LoadDataAsync();
_articles = await _modelArticles.RefreshDataAsync();

关于C# - 异步方法从 ContinueWith 返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20883131/

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