gpt4 book ai didi

c# - 在一个服务的方法中运行多个任务

转载 作者:行者123 更新时间:2023-12-03 10:22:57 25 4
gpt4 key购买 nike

有一个简单的方法是一个很好的做法,它返回任务:

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

最天真的方法是从 View 模型中调用它们:
    public async void Init()
{
var result = await messageService.ReadMessagesTask();
if (result == null)
{
MessagesList = await messageService.DownloadMessagesTask();
var writingResult = await messageService.WriteMessagesTask(MessagesList);
}

但是我怎样才能将这个逻辑存储在服务中,以避免代码在另一个 View 模型中重复呢?或者我应该保持服务清洁并在 View 模型中调用任务?

最佳答案

从您的服务中公开一种方法,该方法包含您现在拥有的内容async void Init()并从VM调用它。您还可以提取接口(interface)并将其注入(inject)您的 View 模型(通过构造函数或属性)。


public class MyViewModel
{
public MyViewModel()
:this(new Service())
{}

public MyViewModel(IService service)
{
Service = service;
Initialize();
}

public IService Service { get; set; }

private async void Initialize()
{
// Fire forget
await Service.DoSomething();
}
}


public interface IService
{
// change if you need to return something
Task DoSomething();
}

public Service : IService
{
public async Task DoSomething()
{
var result = await ReadMessagesAsync();
if (result == null)
{
var messages = await DownloadMessagesAsync();
await WriteMessagesAsync(messages);
}
}

// private read/write/download methods here...
}

关于c# - 在一个服务的方法中运行多个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25957827/

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