小编fou*_*der的帖子

正确使用 return Task.FromException

我最近观察到两个开发人员之间的代码审查。

提交的代码如下:

 public async Task<List<Thing>> GetThings()
    {
        try
        {
            var endpoint = $"{Settings.ThingEndpoint}/things";
            var response = await HttpClient.GetAsync(endpoint);
            return JsonConvert.DeserializeObject<List<Thing>>(await response.Content.ReadAsStringAsync());
        }
        catch (Exception e)
        {
            Log.Logger.Error(e.ToString());
            return await Task.FromException<List<Thing>>(e);
        }
    }
Run Code Online (Sandbox Code Playgroud)

其中收到以下评论:

绝对不需要返回 await Task.FromException>(e),这是您在处理非等待任务时所做的事情。在这种情况下,catch 将捕获任何异常 var response = await HttpClient.GetAsync(endpoint); 会扔。您应该删除它并按原样捕获异常

我不完全理解为什么在这种情况下不使用 Task.FromException,所以我有以下问题:

  1. 审稿人在说什么?
  2. 审稿人正确吗?
  3. 为什么不返回 await Task.FromException?
  4. 返回 await Task.FromException 的正确场景是什么?

.net c# .net-4.0 task

10
推荐指数
1
解决办法
4408
查看次数

MassTransit - 多个消费者都可以收到相同的消息吗?

我有一个 .NET 4.5.2 服务通过 MassTransit 向 RabbitMq 发布消息。

以及使用这些消息的 .NET Core 2.1 服务的多个实例。

目前,.NET 核心消费者服务的竞争实例从其他实例窃取消息。

即第一个消费消息的人将其从队列中取出,其余的服务实例不会消费它。

我希望所有实例都使用相同的消息。

我怎样才能做到这一点?

发布者服务配置如下:

 builder.Register(context =>
            {
                MessageCorrelation.UseCorrelationId<MyWrapper>(x => x.CorrelationId);

                return Bus.Factory.CreateUsingRabbitMq(configurator =>
                {
                    configurator.Host(new Uri("rabbitmq://localhost:5671"), host =>
                    {
                        host.Username(***);
                        host.Password(***);
                    });
                    configurator.Message<MyWrapper>(x => { x.SetEntityName("my.exchange"); });
                    configurator.Publish<MyWrapper>(x =>
                    {
                        x.AutoDelete = true;
                        x.Durable = true;
                        x.ExchangeType = true;
                    });

                });
            })
            .As<IBusControl>()
            .As<IBus>()
            .SingleInstance();
Run Code Online (Sandbox Code Playgroud)

.NET Core Consumer Services 配置如下:

        serviceCollection.AddScoped<MyWrapperConsumer>();

        serviceCollection.AddMassTransit(serviceConfigurator =>
        {
            serviceConfigurator.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                var host …
Run Code Online (Sandbox Code Playgroud)

.net c# masstransit rabbitmq .net-core

8
推荐指数
3
解决办法
6957
查看次数

Why declare a local function static in C# 8.0

In C# 8.0, Static Local Functions are announced

Can anyone help enlighten me as to why you would want to declare a local function as static?

The reason given in in the article:

to ensure that local function doesn't capture (reference) any variables from the enclosing scope

But:

  1. I don't understand why would you want to ensure that?
  2. Is there any other reason or benefits to declare it static? (performance maybe?)

The example code given in the article is:

int …
Run Code Online (Sandbox Code Playgroud)

.net c# static c#-8.0 local-functions

5
推荐指数
3
解决办法
136
查看次数

c# Linq - 从每个组中选择前 2 个

我需要为每个 ProductTypeName 获取前 2 个产品:

var productDetails = (from p in products
                            join po in productOrganisations 
                            on p.Id equals po.ProductId
                            where po.OrganisationId == id
                            where p.ProductTypeId == (typeId > 0 ? typeId : p.ProductTypeId) //filter by type if specified
                            where p.IsLive
                            select new
                            {
                                Id = p.Id,
                                Name = p.Name,
                                SupplierName = p.Supplier.Name,
                                ProductTypeName = p.ProductType.Name,
                                ShortDescription = p.ShortDescription,
                                ProductTypeId = p.ProductTypeId,
                                DatePublished = p.DatePublished,
                                CurrencyId = p.CurrencyId,

                            })
                            .AsNoTracking()
                            .ToArray();
Run Code Online (Sandbox Code Playgroud)

目前上述声明退回我所有的产品,数百。每个产品都有一个属性 ProductTypeName 。

我需要按此 ProductTypeName 分组,然后按发布日期降序获取每个组中的前两个。

有任何想法吗?

c# linq group-by

3
推荐指数
1
解决办法
1819
查看次数

Blazor 服务器方法调用和执行详细信息

我正在关注这个 Blazor 服务器计数器增量示例

具体代码示例如下。

我有三个问题:

1 -单击按钮后是否通过 SignalR 调用 IncrementCount?

2 - IncrementCount 的执行是否发生在服务器上?(与在浏览器中相反)

3 -如果是通过 SignalR - 我怎样才能看到使用 Chrome 开发者工具发出的“呼叫”(请求)?我查看了网络选项卡,看不到任何活动。看截图:

在此处输入图片说明

代码示例:

@page "/counter"

<h1>Counter</h1>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# .net-core blazor blazor-server-side

2
推荐指数
1
解决办法
428
查看次数