MediatR 使用记录-发布订阅运行机制测试

注意:mediatR发布-订阅,订阅方是多个的时候是串行的,一个执行完才执行下一个

// 发送部分代码
  Console.WriteLine($"{DateTime.Now}-发送开始-");
  mediator.Publish<TestEvent>(new TestEvent("nancy"));
  Console.WriteLine($"{DateTime.Now}-发送完毕-");

订阅方-串行执行代码如下:

//订阅方1的代码
public class TestEventHandler1 : INotificationHandler<TestEvent>
{
    public Task Handle(TestEvent notification, CancellationToken cancellationToken)
    {
          return Task.Run(async () =>
          {
              Console.WriteLine($"{DateTime.Now}-TestEventHandler1 我收到了{notification.UserName}");
              await Task.Delay(5000);
              Console.WriteLine($"{DateTime.Now}-TestEventHandler1 -结束");
          });
        //return Task.CompletedTask;

    }
}
//订阅方2的代码
 public class TestEventHandler2 : INotificationHandler<TestEvent>
 {
     public Task Handle(TestEvent notification, CancellationToken cancellationToken)
     {
         return Task.Run(async () =>
        {
            Console.WriteLine($"{DateTime.Now}-TestEventHandler2 我收到了{notification.UserName}");
            await Task.Delay(5000);
            Console.WriteLine($"{DateTime.Now}-TestEventHandler2 -结束");
        });

         //return Task.CompletedTask;
     }
 }
 //订阅方3的代码
  public class TestEventHandler3 : INotificationHandler<TestEvent>
 {
     public Task Handle(TestEvent notification, CancellationToken cancellationToken)
     {
         return  Task.Run(async () =>
         {
             Console.WriteLine($"{DateTime.Now}-TestEventHandler3 我收到了{notification.UserName}");
             await Task.Delay(5000);
             Console.WriteLine($"{DateTime.Now}-TestEventHandler3 -结束");
         });

         //return Task.CompletedTask;
     }
 }

运行结果:
在这里插入图片描述
通过以下方式改为并行:
需在task.run之后 return Task.CompletedTask;直接ruturn task.run 可能框架会await,会等待task.run 内的代码执行完毕后才返回,失去了异步的目的

订阅方-并行执行代码如下:

 public class TestEventHandler1 : INotificationHandler<TestEvent>
 {
     public Task Handle(TestEvent notification, CancellationToken cancellationToken)
     {
             Task.Run(async () =>
           {
               Console.WriteLine($"{DateTime.Now}-TestEventHandler1 我收到了{notification.UserName}");
               await Task.Delay(5000);
               Console.WriteLine($"{DateTime.Now}-TestEventHandler1 -结束");
           });
         return Task.CompletedTask;

     }
 }
  public class TestEventHandler2 : INotificationHandler<TestEvent>
 {
     public Task Handle(TestEvent notification, CancellationToken cancellationToken)
     {
           Task.Run(async () =>
        {
            Console.WriteLine($"{DateTime.Now}-TestEventHandler2 我收到了{notification.UserName}");
            await Task.Delay(5000);
            Console.WriteLine($"{DateTime.Now}-TestEventHandler2 -结束");
        });

         return Task.CompletedTask;
     }
 }
 public class TestEventHandler3 : INotificationHandler<TestEvent>
{
    public Task Handle(TestEvent notification, CancellationToken cancellationToken)
    {
           Task.Run(async () =>
        {
            Console.WriteLine($"{DateTime.Now}-TestEventHandler3 我收到了{notification.UserName}");
            await Task.Delay(5000);
            Console.WriteLine($"{DateTime.Now}-TestEventHandler3 -结束");
        });

        return Task.CompletedTask;
    }

运行结果:
在这里插入图片描述

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值