【问题标题】:.Net Core Channel in Background Tasks后台任务中的 .Net Core Channel
【发布时间】:2021-02-14 18:18:50
【问题描述】:

我想在后台服务中使用chanel,但是在运行我的代码时出现这个错误,我需要做什么。

抱歉英语不好

无法解析服务类型 'System.Threading.Channels.ChannelReader`1[SendMailChanel]' 尝试激活“SendEmailService”时

public class SendMailChanel
    {
        public List<SendMail> SendMails { get; set; }
        public List<string> MailTos { get; set; }
    }

public class SendEmailService: BackgroundService
{
      
        private readonly ChannelReader<SendMailChanel> _channel;

        public HostedService(         
            ChannelReader<SendMailChanel> channel)
        {
            _channel = channel;
        }

        protected override async Task ExecuteAsync(CancellationToken cancellationToken)
        {
            await foreach (var item in _channel.ReadAllAsync(cancellationToken))
            {
                try
                {
                    // do your work with data
                }
                catch (Exception e)
                {
                    
                }
            }
        }
}

[ApiController]
[Route("api/data/upload")]
public class UploadController : ControllerBase
{
    private readonly ChannelWriter<SendMailChanel> _channel;

    public UploadController (
        ChannelWriter<SendMailChanel> channel)
    {
        _channel = channel;
    }

    public async Task<IActionResult> Upload([FromForm] FileInfo fileInfo)
    {
        SendMailChanel mailChanel = new SendMailChanel();
        mailChanel.SendMails = lstSendMail;
        mailChanel.MailTos = lstEmailTo;
        await _channel.WriteAsync(mailChanel);

        return Ok();
    }
}

Startup.cs
services.AddHostedService<SendEmailService>();

【问题讨论】:

  • 您尚未在 DI 容器中注册 Channel&lt;SendMail&gt; 的实例
  • @JohanP 怎么做先生,我谷歌太多但没有找到任何东西这是我尝试过的:1.公共接口 IChannelReader 2.公共 SendEmailService(MySettingsConfiguration 配置,IChannelReader chanel ) 3. services.AddSingleton();但是抛出错误不能将对象...转换为...

标签: c# .net-core channel


【解决方案1】:

按照本指南进行操作

https://flerka.github.io/personal-blog/2020-01-23-communication-with-hosted-service-using-channels/

    services.AddHostedService<SendEmailService>();
    services.AddSingleton<Channel<SendMailChanel>>(Channel.CreateUnbounded<SendMailChanel>(new UnboundedChannelOptions() { SingleReader = true }));
    services.AddSingleton<ChannelReader<SendMailChanel>>(svc => svc.GetRequiredService<Channel<SendMailChanel>>().Reader);
    services.AddSingleton<ChannelWriter<SendMailChanel>>(svc => svc.GetRequiredService<Channel<SendMailChanel>>().Writer);

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2020-11-20
    • 2023-03-31
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多