【发布时间】:2014-09-21 09:35:25
【问题描述】:
最好有一个简单的方法,它返回任务:
public class MessageService : IMessageService
{
public Task<IEnumerable<Message>> DownloadMessagesTask()
{
return MyWebClient.GetMessages();
}
现在,我想在本地存储中添加一个缓存:
public Task<bool> WriteMessagesTask(IEnumerable<Message> list)
{
return MyIsoStorageManager.Write(list);
}
// same for reading
最天真的方法是从视图模型中调用它们:
public async void Init()
{
var result = await messageService.ReadMessagesTask();
if (result == null)
{
MessagesList = await messageService.DownloadMessagesTask();
var writingResult = await messageService.WriteMessagesTask(MessagesList);
}
但是我怎样才能将这个逻辑存储在服务中,以避免代码在另一个视图模型中重复?或者我应该保持服务清洁并在视图模型中调用任务?
【问题讨论】:
-
在返回
Task的方法名称后面加上Async是一个很好的约定 -
@RussCam 我认为返回
Task的应该以*Task为后缀 -
参见msdn.microsoft.com/en-us/library/hh873175.aspx,特别是命名、参数和返回类型
-
将您的简单任务包装并组合到一个服务类中。任务创建确实有开销。
-
从您的服务公开一个方法并从 VM 调用它。这个方法包装了你现在在你的 async Init() 中拥有的东西
标签: c# windows-phone-8 mvvm async-await mvvmcross