mig*_*lla 1 c# asynchronous async-await windows-phone-8
我有一个Windows Phone应用程序,从RSS源获取数据并缓存以前的文章.
public class MainViewModel : BaseViewModel
{
private ObservableCollection<Article> _articles;
}
Run Code Online (Sandbox Code Playgroud)
在我的viewmodel中,我希望能够通过异步方法加载缓存的数据,并通过另一种异步方法继续加载在线数据,以便应用程序可以在加载Web内容时快速显示数据.我的代码目前看起来像这样:
Task.Factory.StartNew(() => _model.LoadDataAsync())
.ContinueWith(antecendent => _model.RefreshDataAsync())
.Wait();
Run Code Online (Sandbox Code Playgroud)
其中LoadDataAsync和RefreshDataAsync方法返回的List <文章>.
public async Task<List<Article>> LoadDataAsync() { ... }
public async Task<List<Article>> RefreshDataAsync() { ... }
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将结果分配给我的文章时:
_articles = await Task.Factory.StartNew(() => _modelArticles.LoadDataAsync())
.ContinueWith(antecendent => _modelArticles.RefreshDataAsync())
.Wait();
Run Code Online (Sandbox Code Playgroud)
它告诉我,我"不能等待虚空".那么我可以对我的代码做些什么来允许它首先给我LoadDataAsync列表,并在完成后添加RefreshDataAsync List?
对于那些熟悉它的人,我希望模仿WPCentral应用程序的行为,该应用程序显示缓存的文章,然后淡出并添加新文章.
错误信息是因为你的代码是await荷兰国际集团的结果Wait,这是void(而不是await能力).您应该删除对此的呼叫Wait.
更多提示:
Task.Run而不是Task.Factory.StartNew(正如我在我的博客中描述的那样).Wait异步任务(再次,链接到我的博客).await而不是ContinueWith.NotifyTaskCompletion从我的AsyncEx库中使用.你可以先试试这个:
_articles = await Task.Run(() => _modelArticles.LoadDataAsync());
_articles = await Task.Run(() => _modelArticles.RefreshDataAsync());
Run Code Online (Sandbox Code Playgroud)
但我不相信Task.Run是必要的:
_articles = await _modelArticles.LoadDataAsync();
_articles = await _modelArticles.RefreshDataAsync();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
715 次 |
| 最近记录: |